Einzeilige Datendatei in Zeilen aufspalten
Hallo,
ich suche eine Möglichkeit eine einzeilige Datendatei (also ohne Zeilenumbruch) nach bestimmten Kriterien in eine Datei mit mehrerern Zeilen zu konvertieren.
Bisher habe ich ergebnislos gesucht, Find, Findstr und FAR arbeiten nur mit Zeilen.
Die Datei besteht aus vielen Datensätzen unterschiedlicher Länge. Jeder Datensatz ist durch geschweifte Klammern ({}) vom nächsten getrennt. Wie kann ich diese Datensätze zeilenweise in der Datei anordnen. Am einfachsten wäre sicherlich, mit einem Hexeditor den String }{ durch ein CR/LF Carriage Return/Line Feed zu ersetzen.
Oder gibt es da bessere Vorschläge in Richtung Batch oder VBScript?
Dank' Euch
ich suche eine Möglichkeit eine einzeilige Datendatei (also ohne Zeilenumbruch) nach bestimmten Kriterien in eine Datei mit mehrerern Zeilen zu konvertieren.
Bisher habe ich ergebnislos gesucht, Find, Findstr und FAR arbeiten nur mit Zeilen.
Die Datei besteht aus vielen Datensätzen unterschiedlicher Länge. Jeder Datensatz ist durch geschweifte Klammern ({}) vom nächsten getrennt. Wie kann ich diese Datensätze zeilenweise in der Datei anordnen. Am einfachsten wäre sicherlich, mit einem Hexeditor den String }{ durch ein CR/LF Carriage Return/Line Feed zu ersetzen.
Oder gibt es da bessere Vorschläge in Richtung Batch oder VBScript?
Dank' Euch
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 399396
Url: https://administrator.de/contentid/399396
Ausgedruckt am: 22.11.2024 um 22:11 Uhr
9 Kommentare
Neuester Kommentar
Wäre ja auch zu schwierig hier mal ein Beispiel Vorher/Nachher des Inhalts zu posten.
VBS kann ich dir auch machen wenn du unbedingt willst.
Grüße Uwe
@echo off
set "quelle=D:\quelle.txt"
set "ziel=D:\ziel.txt"
powershell -Executionpolicy Bypass -NoProfile -Command "[regex]::Matches((gc '%quelle%' -TotalCount 1),'\{[^}]*\}').Value | sc '%ziel%'"
Grüße Uwe
@Gurkenhobel
Bist ja mit dem Linux-Subsystem im Windows. Und sed/awk usw. gibt es auch nativ für Windows ;)
Bist ja mit dem Linux-Subsystem im Windows. Und sed/awk usw. gibt es auch nativ für Windows ;)
Ja, das wäre schön, wenn du mir das auch noch für VBS machen könntest.
Dim fso, matches, match, regex, file, strContent, fileIN, fileOUT, strOUT
fileIN = "D:\quelle.txt"
fileOUT = "D:\ziel.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set regex = CreateObject("vbscript.regexp")
regex.Global = True: regex.IgnoreCase = True
regex.Pattern = "\{[^}]*\}"
strContent = fso.OpenTextFile(fileIN,1).ReadLine
set matches = regex.Execute(strContent)
strOut = ""
If matches.count > 0 Then
For Each match In matches
strOut = strOut & match & vbNewLine
Next
End If
fso.OpenTextFile(fileOUT,2).Write strOUT
Falls deine Dateien UTF-8 oder anders kodiert sein sollten dann nutze zum Einlesen und Wegschreiben der Daten statt der FileSystem-Funktionen folgende Funktionen:
Sub WriteUTF8(file, txt)
With CreateObject("ADODB.Stream")
.Type = 2 : .Charset = "UTF-8" : .Open
.WriteText txt
.SaveToFile file, 2
.Close
End With
End Sub
Function ReadUTF8(file)
With CreateObject("ADODB.Stream")
.Type = 2 : .Charset = "UTF-8" : .Open : .LoadFromFile(file)
ReadUTF8 = .ReadText
.Close
End With
End Function
Viel Spaß
Grüße Uwe
Zitat von @Gurkenhobel:
Leider habe ich am Anfang einen Fehler gemacht und zwar habe ich bei den Datensätzen nicht beachtet, dass zwischen den geschweiften Klammern noch ein Komma steht
Spielt bei meinen Skripts keine Rolle.Leider habe ich am Anfang einen Fehler gemacht und zwar habe ich bei den Datensätzen nicht beachtet, dass zwischen den geschweiften Klammern noch ein Komma steht
und das Semikolon (Hex: 0D 0A 3B) ersetzen.
Brauchst du dich hier nur einlesen und dann selbst anwenden: VBScript Replace FunctionOch nee, ich will kein Linux !
Dann verpasst das beste.