.txt datei auslesen, Text ausschneiden und in neue Datei speichern.
Hallo,
bitte um Eure Hilfe.
Ich möchte aus einer .txt Datei bestimmte Bereiche ausschneiden und in mehrere neue Dateien abspeichern.
Es handelt sich um einen Druckstrom aus einem Programm
.txt Datei ist folgendermaßen aufgebaut.
<-XxX
text
text
text
<-YyY <-XxX
text
text
text
Zwischensumme
<-YyY <-XxX
text
text
text
<-YyY <-XxX
nun sollte alles von <-XxX bis <-YyY ausgeschnitten und in einer neuen txt Datei abgespeichert werden,
ausser es steht Zwischensumme in dem Bereich, dann sollte <-YyY ignoriert werden und erst beim nächsten
oder übernächsten <-YyY ausgeschnitten werden.
Und das so oft bis die Quelldatei leer ist, welche dann auch gelöscht werden kann.
Am Anfang der Ziel Datei sollte jeweils AaA und am Ende ZzZ stehen.
Ist für mich ein großes ?, aber vermutlich für Euch Spezialisten kein Problem sowas zu machen, ich hab echt keine Ahnung wo ich anfangen oder suchen soll.
Batch oder VBS bin für alle Lösungsvorschläge offen.
Danke im Voraus
Andy
bitte um Eure Hilfe.
Ich möchte aus einer .txt Datei bestimmte Bereiche ausschneiden und in mehrere neue Dateien abspeichern.
Es handelt sich um einen Druckstrom aus einem Programm
.txt Datei ist folgendermaßen aufgebaut.
<-XxX
text
text
text
<-YyY <-XxX
text
text
text
Zwischensumme
<-YyY <-XxX
text
text
text
<-YyY <-XxX
nun sollte alles von <-XxX bis <-YyY ausgeschnitten und in einer neuen txt Datei abgespeichert werden,
ausser es steht Zwischensumme in dem Bereich, dann sollte <-YyY ignoriert werden und erst beim nächsten
oder übernächsten <-YyY ausgeschnitten werden.
Und das so oft bis die Quelldatei leer ist, welche dann auch gelöscht werden kann.
Am Anfang der Ziel Datei sollte jeweils AaA und am Ende ZzZ stehen.
Ist für mich ein großes ?, aber vermutlich für Euch Spezialisten kein Problem sowas zu machen, ich hab echt keine Ahnung wo ich anfangen oder suchen soll.
Batch oder VBS bin für alle Lösungsvorschläge offen.
Danke im Voraus
Andy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 218177
Url: https://administrator.de/forum/txt-datei-auslesen-text-ausschneiden-und-in-neue-datei-speichern-218177.html
Ausgedruckt am: 02.02.2025 um 05:02 Uhr
6 Kommentare
Neuester Kommentar
Hallo Andy,
versuchs mal mit folgendem VBS-Script und überprüfe damit ob ich dich richtig verstanden habe:
(Zeile 1 den Pfad zu deiner Textdatei eintragen, und in Zeile2 den Pfad wo die neuen Dateien erstellt werden sollen)
getestet habe ich mit folgendem Text:
laut deiner Beschreibung sollte das Script aus diesem Text dann zwei Dateien mit folgendem Inhalt machen:
Datei 1
Datei 2
wenn ich dich richtig verstanden habe ...
Das löschen der Quelldatei habe ich noch nicht aktiviert(Zeile 25), damit du testen kannst.
Grüße Uwe
versuchs mal mit folgendem VBS-Script und überprüfe damit ob ich dich richtig verstanden habe:
(Zeile 1 den Pfad zu deiner Textdatei eintragen, und in Zeile2 den Pfad wo die neuen Dateien erstellt werden sollen)
FILEPATH = "C:\test.txt"
FILEPATH_NEWFILES = "C:\Ausgabe"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objText = objFSO.OpenTextFile(FILEPATH,1)
strText = objText.ReadAll
objText.Close()
counter = 1
Set myRegExp = CreateObject("vbscript.regexp")
myRegExp.IgnoreCase = False
myRegExp.Global = True
myRegExp.Pattern = "((<-XxX[\s\S]*?Zwischensumme[\s\S]*?<-YyY[\s\S]*?<-YyY)|(<-XxX[\s\S]*?<-YyY))"
Set myMatches = myRegExp.Execute(strText)
If myMatches.Count >= 1 Then
For Each myMatch In myMatches
If myMatch.SubMatches.Count >= 1 Then
Set f = objFSO.OpenTextFile(FILEPATH_NEWFILES & "\test_" & counter & ".txt",2,True)
strNewContent = "AaA" & vbNewLine & myMatch.SubMatches(0) & vbNewLine & "ZzZ"
f.Write(strNewContent)
f.Close
counter = counter + 1
End If
Next
End If
'Nächste Zeile auskommentieren zum löschen der Quell-Datei
'objFSO.DeleteFile(FILEPATH)
Set objFSO = Nothing
getestet habe ich mit folgendem Text:
<-XxX
text
text
text
......
<-YyY <-XxX
text
text
text
Zwischensumme
......
<-YyY <-XxX
text
text
text
......
<-YyY <-XxX
text
Zwischensumme
text
text
......
<-YyY <-XxX
text
text
text
......
<-YyY
laut deiner Beschreibung sollte das Script aus diesem Text dann zwei Dateien mit folgendem Inhalt machen:
Datei 1
AaA
<-XxX
text
text
text
......
<-YyY <-XxX
text
text
text
Zwischensumme
......
<-YyY <-XxX
text
text
text
......
<-YyY
ZzZ
AaA
<-XxX
text
Zwischensumme
text
text
......
<-YyY <-XxX
text
text
text
......
<-YyY
ZzZ
Das löschen der Quelldatei habe ich noch nicht aktiviert(Zeile 25), damit du testen kannst.
Grüße Uwe
Dein Wunsch sei mir Befehl
In Zeile 6 kannst du die Dateierweiterungen angeben, die im Quell-Ordner durchsucht werden soll - dies können auch mehrere sein Bsp.
Grüße Uwe
In Zeile 6 kannst du die Dateierweiterungen angeben, die im Quell-Ordner durchsucht werden soll - dies können auch mehrere sein Bsp.
arrFileExtensions = Array("txt","log")
'Pfad in dem sich die Stream-Files befinden
FILEPATH = "C:\quelle"
'Ausgabepfad für die einzelnen Rechnungen
OUTPUTPATH = "C:\Ziel"
'Erweiterungen der Dateien die durchsucht werden sollen
arrFileExtensions = Array("txt")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set myRegExp = CreateObject("vbscript.regexp")
myRegExp.Global = True
For Each file In objFSO.GetFolder(FILEPATH).Files
For i = 0 To UBound(arrFileExtensions)
If LCase(arrFileExtensions(i)) = LCase(objFSO.GetExtensionName(file.Path)) Then
Set objText = objFSO.OpenTextFile(file.Path,1)
strText = objText.ReadAll
objText.Close()
myRegExp.IgnoreCase = False
myRegExp.Pattern = "(<-XxX[\s\S]*?<-YyY)"
Set myMatches = myRegExp.Execute(strText)
If myMatches.Count >= 1 Then
counter = 1
strNewContent = ""
For Each myMatch In myMatches
If myMatch.SubMatches.Count >= 1 Then
myRegExp.IgnoreCase = True
myRegExp.Pattern = "Zwischensumme"
If myRegExp.Test(myMatch.SubMatches(0)) Then
strNewContent = strNewContent & myMatch.SubMatches(0)
Else
strNewContent = strNewContent & myMatch.SubMatches(0)
newFilePath = OUTPUTPATH & "\" & objFSO.GetBaseName(file.Path) & "_Rechnung_" & counter & "." & objFSO.GetExtensionName(file.Path)
Set f = objFSO.OpenTextFile(newFilePath,2,True)
strNewContent = "AaA" & vbNewLine & strNewContent & vbNewLine & "ZzZ"
f.Write(strNewContent)
f.Close
strNewContent = ""
counter = counter + 1
End If
End If
Next
End If
'Nächste Zeile auskommentieren zum löschen der Quell-Datei
'objFSO.DeleteFile(file.Path)
Exit For
End If
Next
Next
wscript.echo "Fertig"
Set objFSO = Nothing
Set myRegExp = Nothing
Grüße Uwe
Zitat von @noob-x:
was muss ich jetzt ändern wenn ich die Datei nicht löschen sondern in einem Ordner archivieren möchte ?
habs mit objFSO.MoveFile anstatt objFSO.DeleteFile versucht und den Zielordner eingegeben aber da bekomme ich immer ne
Fehlermeldung.
da hat du wahrscheinlich den Zielordner nicht mit einem Backslash am Ende angegeben, so sollte die Zeile aussehen:was muss ich jetzt ändern wenn ich die Datei nicht löschen sondern in einem Ordner archivieren möchte ?
habs mit objFSO.MoveFile anstatt objFSO.DeleteFile versucht und den Zielordner eingegeben aber da bekomme ich immer ne
Fehlermeldung.
objFSO.MoveFile file.Path,"c:\Backup\"