Textdatei splitten in Anzahl Datensätze aus Originaldatei
Guten Tag an die Profis,
ich stehe vor einem Problem mit einer .txt Datei. Wir erstellen eine .txt datei mit Daten aus einem SQL-Server.
Jeder Datensatz belegt dabei eine feste Satzlänge (855 Zeichen) in der .txt Datei.
Die Daten in der .txt Datei werden fortlaufend geschrieben.
Es wird jeden Tag eine neue Datei mit unterschiedlicher Anzahl an Datensätzen erstellt.
Jetzt ist meine Aufgabe dazu, aus der EINEN .txt Datei für jeden darin enthaltenen Datensatz (je 855 Zeichen) eine eigene .txt Datei zu erstellen und diese dann in einem Unterverzeichnis zur Verfügung zu stellen. Quasi die Originaldatei zu splitten in die Anzahl der enthaltenen Datensätze.
Ein Programmcode in powershell oder vbs wäre für mich die Beste Wahl.
Kann jemand helfen ???
Besten Dank im voraus, Gruß lexura
ich stehe vor einem Problem mit einer .txt Datei. Wir erstellen eine .txt datei mit Daten aus einem SQL-Server.
Jeder Datensatz belegt dabei eine feste Satzlänge (855 Zeichen) in der .txt Datei.
Die Daten in der .txt Datei werden fortlaufend geschrieben.
Es wird jeden Tag eine neue Datei mit unterschiedlicher Anzahl an Datensätzen erstellt.
Jetzt ist meine Aufgabe dazu, aus der EINEN .txt Datei für jeden darin enthaltenen Datensatz (je 855 Zeichen) eine eigene .txt Datei zu erstellen und diese dann in einem Unterverzeichnis zur Verfügung zu stellen. Quasi die Originaldatei zu splitten in die Anzahl der enthaltenen Datensätze.
Ein Programmcode in powershell oder vbs wäre für mich die Beste Wahl.
Kann jemand helfen ???
Besten Dank im voraus, Gruß lexura
Please also mark the comments that contributed to the solution of the article
Content-Key: 229652
Url: https://administrator.de/contentid/229652
Printed on: May 4, 2024 at 09:05 o'clock
7 Comments
Latest comment
Hallo lexura und willkommen im Forum!
Da Du keine näheren Angaben zu den gewünschten Datei-/Verzeichnisnamen machst, verwende ich für die Ausgabe das Tagesdatum:
Grüße
bastla
Da Du keine näheren Angaben zu den gewünschten Datei-/Verzeichnisnamen machst, verwende ich für die Ausgabe das Tagesdatum:
Ein = "D:\Gesamtdatei.txt"
Zeichenanzahl = 855
Basisordner = "D:\" 'unter diesem Ordner wird der Unterordner erstellt
Set fso = CreateObject("Scripting.FileSystemObject")
Datum = Right(Date, 4) & "-" & Mid(Date, 4, 2) & "-" & Left(Date, 2) 'Datum in der Form "JJJJ-MM-TT"
Pfad = fso.BuildPath(Basisordner, Datum) 'Ordnerpfad erstellen
T = fso.OpenTextFile(Ein).ReadAll 'Datei in String einlesen
Anzahl = Int(Len(T) / Zeichenanzahl) 'Anzahl vollständiger Datensätze ermitteln
If Not fso.FolderExists(Pfad) Then fso.CreateFolder(Pfad) 'Ordner erzeugen
'Zählschleife für die formatierte Ausgabe der laufenden Nummer (4-stellig mit führenden Nullen)
For i = 10001 To 10000 + Anzahl
'Datei mit dem Namen "JJJJ-MM-TT_####.txt" erzeugen
'Dateiinhalt: Teilstring ab Position (Abschnittsnummer - 1) * Zeichenanzahl mit Länge Zeichenanzahl
'Abschnittsnummer: i - 10000
fso.CreateTextFile(fso.BuildPath(Pfad, Datum & "_" & Right(i, 4)) & ".txt").Write Mid(T, (i - 10001) * Zeichenanzahl + 1, Zeichenanzahl)
Next
bastla
Hi lexura,
und wenn du Powershell willst:
Die Ausgabe der Dateien erfolgt mit dem aktuellen Datum und einem Zähler für die Abschnitte:
Grüße Uwe
und wenn du Powershell willst:
$infile = "D:\data.txt"
$outpath = "D:\Ausgabeordner"
$zeichen = 855
$content = gc $infile | out-string
$length = ($content | measure -Character).Characters
$parts = 0
if($length -gt $zeichen){
$parts = [int]($length/$zeichen)
}else{
$parts = 1
$zeichen = $length
}
for($i=0;$i -lt $parts;$i++){
echo "$($content.Substring($i*$zeichen,$zeichen))" | out-file "$outpath\$(get-date -Format "yyyy-MM-dd")_$($i+1).txt"
}
JJJJ-MM-TT_[Zähler].txt
Grüße Uwe
$infile = "D:\Ausgangsdatei.txt"
$outpath = "D:\Uebermittlungsdateien"
$zeichen = 855
$content = gc $infile | out-string
$length = ($content | measure -Character).Characters
$parts = 0
if($length -gt $zeichen){
$parts = [int]($length/$zeichen)
}else{
$parts = 1
$zeichen = $length
}
for($i=0;$i -lt $parts;$i++){
$file = $content.Substring($i*$zeichen,$zeichen).TrimEnd("`r`n")
[System.IO.File]::WriteAllText("$outpath\$(get-date -Format "yyyy-MM-dd")_$($i+1).txt",$file)
}
Sind die Zeilenumbrüche zufällig die Trennung der Abschnitte?, dann könnte man das auch einfacher lösen ...
Grüße Uwe