In txt nur Wort auslesen und dann mit Textfragmenten ergänzen
Guten Morgen allerseits,
habe mich schon ein bisschen über die Sufu durchgesucht aber irgendwie nix wirklich passendes gefunden; also falls ich nicht richtig geguckt hab seht es mir nach.
ich denke dass mein Anliegen nicht besonders schwer/aufregend für euch sein wird:
Ich möchte eine txt (nennen wir sie ganz kreativ Liste.txt) auslesen und ein bestimmtes Wort/Textfragment in einer neuen txt gespeichert aufgelistet dannach auffinden (nennen wir sie Ergebnis.txt). Das Wort hat nach seinem immer gleichbleibenden Anfang immer 2 - 5 variierende Zahlen:
Bsp:
Datei=?1273
Datei=?17345
Datei=?523
Datei=?10
...
wobei der erste Teil wie gesagt immer gleichbleibt (Datei=?). Die Worte sind in Fließtext eingearbeitet. Ich habe mit findstr schon rumprobiert aber bekomme immer nur die ganze Zeile aufgelistet jedoch möchte ich nur das Wort/Textfragment haben.
Wenn diese Liste dann erstellt ist soll im zweiten Schritt ein neues Fragment vor jede Zeile in der Ergebnis Liste gesetzt werden. Bsp "Batch" - Dass ich hinterher eine Liste mit den Ausdrücken
BatchDatei=?1273
BatchDatei=?17345
BatchDatei=?523
BatchDatei=?10
...
habe. Ich hoffe das war einigermaßen verständlich; wäre dankbar wenn mir geholfen würde.
Gruß
lalaman
habe mich schon ein bisschen über die Sufu durchgesucht aber irgendwie nix wirklich passendes gefunden; also falls ich nicht richtig geguckt hab seht es mir nach.
ich denke dass mein Anliegen nicht besonders schwer/aufregend für euch sein wird:
Ich möchte eine txt (nennen wir sie ganz kreativ Liste.txt) auslesen und ein bestimmtes Wort/Textfragment in einer neuen txt gespeichert aufgelistet dannach auffinden (nennen wir sie Ergebnis.txt). Das Wort hat nach seinem immer gleichbleibenden Anfang immer 2 - 5 variierende Zahlen:
Bsp:
Datei=?1273
Datei=?17345
Datei=?523
Datei=?10
...
wobei der erste Teil wie gesagt immer gleichbleibt (Datei=?). Die Worte sind in Fließtext eingearbeitet. Ich habe mit findstr schon rumprobiert aber bekomme immer nur die ganze Zeile aufgelistet jedoch möchte ich nur das Wort/Textfragment haben.
Wenn diese Liste dann erstellt ist soll im zweiten Schritt ein neues Fragment vor jede Zeile in der Ergebnis Liste gesetzt werden. Bsp "Batch" - Dass ich hinterher eine Liste mit den Ausdrücken
BatchDatei=?1273
BatchDatei=?17345
BatchDatei=?523
BatchDatei=?10
...
habe. Ich hoffe das war einigermaßen verständlich; wäre dankbar wenn mir geholfen würde.
Gruß
lalaman
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 80356
Url: https://administrator.de/contentid/80356
Ausgedruckt am: 24.11.2024 um 23:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo lalaman und willkommen im Forum!
Aufgrund Deiner Beschreibung bleiben noch Fragen offen:
- Stellt der Suchbegriff immer ein eigenes Wort dar, oder soll er auch als Wortbestandteil (zB in "BatchDatei=?1273") gefunden werden?
- Sollen nur solche Einträge gefunden werden, bei welchen nach dem Suchbegriff "Datei=?" ausschließlich "2 - 5 variierende Zahlen" (eher Ziffern) folgen, bzw stellt auch die Anzahl dieser Ziffern ein Kriterium dar (also: mehr oder weniger Ziffern wären nicht zulässig)?
- Welches Zeichen ist nach der letzten Ziffer zu erwarten: Leerzeichen, Satzzeichen, unbekannt?
Ein erster Ansatz, allerdings nicht in Batch, sondern in VBScript, könnte jedenfalls so aussehen:
Speichere das Script zb unter "C:\Scripts\FindeTextUndErstelleListe.vbs". Falls Du den Windows-Editor verwendest, musst Du entweder vor dem Speichen den Dateityp auf "Alle Dateien" setzen oder den Dateinamen unter Anführungszeichen eingeben, da ansonsten der Typ ".txt" angehängt wird.
Das Script kannst Du per Doppelklick oder aus einem Batch mit
starten.
Gefunden werden alle Vorkommen von "Datei=?#", wobei # für mindestens eine Ziffer steht (Anzahl ansonsten egal) und der Suchbegriffnicht auch als Wortbestandteil gefunden wird.
Grüße
bastla
Aufgrund Deiner Beschreibung bleiben noch Fragen offen:
- Stellt der Suchbegriff immer ein eigenes Wort dar, oder soll er auch als Wortbestandteil (zB in "BatchDatei=?1273") gefunden werden?
- Sollen nur solche Einträge gefunden werden, bei welchen nach dem Suchbegriff "Datei=?" ausschließlich "2 - 5 variierende Zahlen" (eher Ziffern) folgen, bzw stellt auch die Anzahl dieser Ziffern ein Kriterium dar (also: mehr oder weniger Ziffern wären nicht zulässig)?
- Welches Zeichen ist nach der letzten Ziffer zu erwarten: Leerzeichen, Satzzeichen, unbekannt?
Ein erster Ansatz, allerdings nicht in Batch, sondern in VBScript, könnte jedenfalls so aussehen:
Const Liste = "D:\Liste.txt"
Const Ergeb = "D:\Ergebnis.txt"
Const Muster = "Datei=\?\d+"
Const Prefix = "Batch"
Set fso = CreateObject("Scripting.FileSystemObject")
Inhalt = fso.OpenTextFile(Liste, 1).ReadAll
Set regAusdr = New RegExp ' Erstellt einen regulären Ausdruck.
regAusdr.Pattern = Muster ' Setzt das Muster.
regAusdr.IgnoreCase = True ' Unterscheidet nicht zwischen Groß- und Kleinschreibung
regAusdr.Global = True ' Sucht alle Vorkommen
Set Uebereinstimmungen = regAusdr.Execute(Inhalt) ' Führt die Suche aus.
For Each Uebereinstimmung in Uebereinstimmungen ' Durchläuft die Übereinstimmungen.
Ergebnis = Ergebnis & Prefix & Uebereinstimmung.Value & vbCRLF
Next
fso.CreateTextFile(Ergeb, True).Write Ergebnis
Das Script kannst Du per Doppelklick oder aus einem Batch mit
cscript //nologo "C:\Scripts\FindeTextUndErstelleListe.vbs"
Gefunden werden alle Vorkommen von "Datei=?#", wobei # für mindestens eine Ziffer steht (Anzahl ansonsten egal) und der Suchbegriff
Grüße
bastla
Hallo lalaman!
Die Originaldatei wird als Sicherungskopie unter "Originalname.bak" gespeichert und die neue Version erhält den Namen der Originaldatei.
Grüße
bastla
P.S.:
Ok den ersten Teil hab ich jetzt schon selbst gelöst
Magst Du Deine Lösung vorstellen?bei X-beliebigen Zeilen einer TXT einen bestimmten Ausdruck vor jede Zeile einer bereits vorhandenen Liste ...
... bekommst Du etwa so:@echo off & setlocal
set "Liste=D:\Liste.txt"
set "Prefix=Batch"
set "Bak=%Liste%.bak"
move "%Liste%" "%Bak%"
for /f "usebackq delims=" %%i in ("%Bak%") do echo %Prefix%%%i>>"%Liste%"
Grüße
bastla
P.S.:
hatte den Post von bastla gar nicht bemerkt.
Stand ja auch schon ewig lange (seit 17:08:25 Uhr) dort ...
Hallo lalaman!
Sehr lobenswert, dass Du daran gedacht hast: Wie kann ich einen Beitrag als gelöst markieren?
Noch eine Anmerkung zum VBScript: Wenn Du
verwendest, werden nur genau 1 bis 5 Ziffern gefunden.
Grüße
bastla
Sehr lobenswert, dass Du daran gedacht hast: Wie kann ich einen Beitrag als gelöst markieren?
Noch eine Anmerkung zum VBScript: Wenn Du
Const Muster = "Datei=\?\d{1,5}"
Grüße
bastla
Hallo lalaman!
Da der Punkt eine besondere Bedeutung hat, musst Du auch diesen "maskieren":
Mit "\d" wird eine Ziffer beschrieben - insoferne war noch eine weitere kleine Korektur erforderlich.
Eine Übersicht über die möglichen Suchmuster findest Du hier.
Grüße
bastla
Da der Punkt eine besondere Bedeutung hat, musst Du auch diesen "maskieren":
Const Muster = "Datei\.php\?id=\d{1,5}"
Eine Übersicht über die möglichen Suchmuster findest Du hier.
Grüße
bastla