gurkenhobel
Goto Top

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

Content-ID: 399396

Url: https://administrator.de/contentid/399396

Ausgedruckt am: 22.11.2024 um 22:11 Uhr

bloodstix
bloodstix 25.01.2019 um 11:41:22 Uhr
Goto Top
Hallo,

du könntest dir das Linux-Subsystem installieren und dann mit apt-get "sed" installieren.
Dann wärst du mit
cat Infile | sed -e 's/{}/\n/g' > Outfile  
fertig.

Gruß
bloody
colinardo
colinardo 25.01.2019 aktualisiert um 11:47:11 Uhr
Goto Top
Wäre ja auch zu schwierig hier mal ein Beispiel Vorher/Nachher des Inhalts zu posten.
@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%'"  
VBS kann ich dir auch machen wenn du unbedingt willst.

Grüße Uwe
Gurkenhobel
Gurkenhobel 25.01.2019 aktualisiert um 11:52:22 Uhr
Goto Top
@bloodstix Danke, aber ich bleibe lieber bei meinem WINDO*S
Gurkenhobel
Gurkenhobel 25.01.2019 aktualisiert um 11:53:11 Uhr
Goto Top
@colinardo

Ja, das wäre schön, wenn du mir das auch noch für VBS machen könntest.

Grüße Micha
bloodstix
bloodstix 25.01.2019 um 11:54:46 Uhr
Goto Top
@Gurkenhobel

Bist ja mit dem Linux-Subsystem im Windows. Und sed/awk usw. gibt es auch nativ für Windows ;)
colinardo
colinardo 25.01.2019 aktualisiert um 12:10:26 Uhr
Goto Top
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
Gurkenhobel
Gurkenhobel 25.01.2019 um 12:17:49 Uhr
Goto Top
Viel Spaß
Grüße Uwe

Ja, danke erstmal.
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. Es müsse also das Pattern auf },{ erweitert werden (Hex 7D, 2C 7B) und - damit die Dateigröße gleich bleibt - bitte durch CR LF und das Semikolon (Hex: 0D 0A 3B) ersetzen.

Grüße Micha
Gurkenhobel
Gurkenhobel 25.01.2019 um 12:19:17 Uhr
Goto Top
Bist ja mit dem Linux-Subsystem im Windows. Und sed/awk usw. gibt es auch nativ für Windows ;)

Och nee, ich will kein Linux !

Trotzdem danke
Micha
colinardo
colinardo 25.01.2019 aktualisiert um 12:45:26 Uhr
Goto Top
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.
und das Semikolon (Hex: 0D 0A 3B) ersetzen.
Brauchst du dich hier nur einlesen und dann selbst anwenden: VBScript Replace Function
Och nee, ich will kein Linux !
Dann verpasst das beste.