Mit Batch-Datei Textdatei nach Zeichenblöcke suchen, ausschneiden und in neues Textfile einfügen
Hallo Administradoren und Mods
erstmal ein grosse Lob an diese Seite und die Benutzer, sie hat mir schon des öfteren weitergeholfen.
Ich möchte aus einem Textfile, dass mehrer zusammengehörige Zeilen (Datenblöcke) enthält, einzelne Datenböcke suchen, ausschneiden und in einem neuen Textfile einfügen.
Dies ist ein Beispiel, wie es in der Textdatei vorkommt:
@z 00002 000011 10
8509002 0 4 072257
8509004 0 3 072257
8509411 0 2 072257
8503225 0 6 072257
8503206 0 2 072257
8503202 0 6 072257
8503000 0 14 072257
8500010 2 9 072257
8509000 1 8 072257
8503209 0 3 072257
@z 00002 085000 01
8008094 0 18 000030
8500010 1 9
8500090 0 5 083466
8014350 0 1 000030
8014277 0 4
8014228 0 3 000030
@z 01110 80____ 01
8029034 0 9 053540
8014008 0 3 053540
@z 01113 000022 02
8506210 1 12 000060
usw, Textdatei ca 30mb gross
Ein Datenblock geht immer von der @z bis zur Zeile oberhalb der nächsten Zeile mit @z
Also so:
@z 00002 085000 01
8008094 0 18 000030
8500010 1 9
8500090 0 5 083466
8014350 0 1 000030
8014277 0 4
8014228 0 3 000030
Aus diesem Textfile möchte ich alle Datenblöcke, die ein 085000 beinhalten, ausschneiden und in ein anderes Textfile kopiern.
Das Batch sollte diese Operation solange durchführen, bis keine Datenblöcke mit 085000 vorhanden sind.
Leider habe ich keinen blassen Schimmer, wie ich dies angehen soll.
Hoffe jemand kann mir weiterhelfen.
Bei Unklarheitn einfach nachfragen. Besten Dank für eure Bemühungen.
Es grüsst Calimero
erstmal ein grosse Lob an diese Seite und die Benutzer, sie hat mir schon des öfteren weitergeholfen.
Ich möchte aus einem Textfile, dass mehrer zusammengehörige Zeilen (Datenblöcke) enthält, einzelne Datenböcke suchen, ausschneiden und in einem neuen Textfile einfügen.
Dies ist ein Beispiel, wie es in der Textdatei vorkommt:
@z 00002 000011 10
8509002 0 4 072257
8509004 0 3 072257
8509411 0 2 072257
8503225 0 6 072257
8503206 0 2 072257
8503202 0 6 072257
8503000 0 14 072257
8500010 2 9 072257
8509000 1 8 072257
8503209 0 3 072257
@z 00002 085000 01
8008094 0 18 000030
8500010 1 9
8500090 0 5 083466
8014350 0 1 000030
8014277 0 4
8014228 0 3 000030
@z 01110 80____ 01
8029034 0 9 053540
8014008 0 3 053540
@z 01113 000022 02
8506210 1 12 000060
usw, Textdatei ca 30mb gross
Ein Datenblock geht immer von der @z bis zur Zeile oberhalb der nächsten Zeile mit @z
Also so:
@z 00002 085000 01
8008094 0 18 000030
8500010 1 9
8500090 0 5 083466
8014350 0 1 000030
8014277 0 4
8014228 0 3 000030
Aus diesem Textfile möchte ich alle Datenblöcke, die ein 085000 beinhalten, ausschneiden und in ein anderes Textfile kopiern.
Das Batch sollte diese Operation solange durchführen, bis keine Datenblöcke mit 085000 vorhanden sind.
Leider habe ich keinen blassen Schimmer, wie ich dies angehen soll.
Hoffe jemand kann mir weiterhelfen.
Bei Unklarheitn einfach nachfragen. Besten Dank für eure Bemühungen.
Es grüsst Calimero
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 202215
Url: https://administrator.de/contentid/202215
Ausgedruckt am: 24.11.2024 um 08:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo Calim3ro und willkommen im Forum!
Mit einem VBScript ließe sich das eleganter lösen als mit Batch:
Zur Not könnte das Script auch von einem Batch (temporär) erzeugt werden.
Grüße
bastla
[Edit] Verwendung eines zweiten Suchbegriffs ergänzt [/Edit]
Mit einem VBScript ließe sich das eleganter lösen als mit Batch:
Ein = "Textfile.txt"
Aus = "Ausgeschnittene.txt"
Markierung = "Z"
Suche1 = "085000"
Suche2 = "000022"
Set fso = CreateObject("Scripting.FileSystemObject")
T = Split(fso.OpenTextFile(Ein).ReadAll, Markierung)
Set A = fso.CreateTextFile(Aus)
For Each Block In T
If InStr(Block, Suche1) + InStr(Block, Suche2) > 0 Then A.Write Markierung & Block
Next
Grüße
bastla
[Edit] Verwendung eines zweiten Suchbegriffs ergänzt [/Edit]
Hallo Calim3ro!
Bei einer größeren Anzahl an Suchbegriffen könntest Du die folgende Variante testen (ich hab's nicht gemacht ):
Weitere Alternative: Eine Textdatei, die je ein Suchwort pro Zeile enthält, bereitstellen und am Scriptanfang einmalig in ein Array einlesen - das könnte dann so aussehen:
Achtung: In der Datei "Suchbegriffe.txt" keine Leerzeilen (und auch keine Zeilenschaltung nach der letzten Zeile) verwenden!
Grüße
bastla
Bei einer größeren Anzahl an Suchbegriffen könntest Du die folgende Variante testen (ich hab's nicht gemacht ):
Ein = "Textfile.txt"
Aus = "Ausgeschnittene.txt"
Markierung = "Z"
Suche = Array("085000", "000022", "112233", "555555")
Set fso = CreateObject("Scripting.FileSystemObject")
T = Split(fso.OpenTextFile(Ein).ReadAll, Markierung)
Set A = fso.CreateTextFile(Aus)
For Each Block In T
Gefunden = False
For Each Suchwort In Suche
If InStr(Block, Suchwort) > 0 Then
Gefunden = True
Exit For
End If
Next
If Gefunden Then A.Write Markierung & Block
Next
Ein = "Textfile.txt"
Aus = "Ausgeschnittene.txt"
Markierung = "Z"
Suche = "Suchbegriffe.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
T = Split(fso.OpenTextFile(Ein).ReadAll, Markierung)
S = Split(fso.OpenTextFile(Suche).ReadAll, vbNewline)
Set A = fso.CreateTextFile(Aus)
For Each Block In T
Gefunden = False
For Each Suchwort In S
If InStr(Block, Suchwort) > 0 Then
Gefunden = True
Exit For
End If
Next
If Gefunden Then A.Write Markierung & Block
Next
Grüße
bastla