Importdatei erstellen aus Drittsystem

TylerDurden69

Newbie
Registriert
Dez. 2018
Beiträge
6
Hallo Zusammen,

ich benötige eure Hilfe bei einem Import in mein CMS System.
Ich bekomme mehrere .TXT mit insgesamt 4 Variablen:

Bsp1.txt:
1FA6P8CF6J5134249
Gärtner, Josef
MY-GD 15
45124

Bsp2.txt:
2FA6P8CF6J5134249
Gärtner, Hans
MY-GD 16
45125


Um es in mein System importieren zu können, benötige ich dieses bestimmtes Format:
@FOLDER,FN:FahrgestellNr,FN:KundenName,FN:AmtlKennzeichen,FN:KundenNr,BI:2001
^1FA6P8CF6J5134249^,^Gärtner, Josef^,^MY-GD 15^,^45124^,^1FA6P8CF6J5134249.pdf^
^2FA6P8CF6J5134249^,^Gärtner, Hans^,^MY-GD 16^,^45125^,^2FA6P8CF6J5134249.pdf^

Kann mir Jemand sagen wie ich das mit einem BATCH oder sonst wie bewerkstelligen kann?
 
Du hast also hunderte *.txt in dem Format und willst alle in dieses CSV-Format bringen?
 
Suchen & Ersetzen.

Suche nach \r\n und ersetze dies durch ein Komma. Die Zirkumflexe wirst du nicht benötigen, das sollte die Zielsoftware vermutlich können, aber über die verrätst du ja nichts.

edit: GREP könnte hier auch funktionieren.
 
  • Gefällt mir
Reaktionen: BeBur
Als *.ps1 speichern und mit Rechtsklick "mit Powershell ausführen" starten:
Code:
$output = ("{0:yyyy-MM-dd-HH-mm-ss}" -f (Get-Date)) + ".csv"

"@FOLDER,FN:FahrgestellNr,FN:KundenName,FN:AmtlKennzeichen,FN:KundenNr,BI:2001" > $output

Get-ChildItem *.txt | % {
  "^" + ((Get-Content -Raw $_) -replace "[\r\n]+","^,^") + "^" >> $output
}
Das speichert dir dann aus allen *.txt im aktuellen Ordner eine CSV in dem Format.
 
funktioniert prima! Vielen Dank !!!
Ergänzung ()

Hallo Yuuri,

ist es irgendwie möglich die erzeugte Datei gleich zu benennen wie originale TXT?
 
Zuletzt bearbeitet:
Wenn du hunderte Dateien zusammenwirfst, geht das "gleich" schlecht. Wie ist denn das Format? Also gibts bspw. <stamm name>_<fortlaufende nr>.txt als Muster oder irgendwas?
 
Leider ist der Dateiname immer unterschiedlich...
Der Dateiname steht aber immer in der ersten Zeile in der TXT.
Wäre es Möglich diese erste Zeile auszulesen und diesen als Dateinamen zu verwenden?
 
Code:
$output = $null
$toNatural = { [regex]::Replace($_, '\d+', { $args[0].Name.PadLeft( 20 ) }) }
$header = "@FOLDER,FN:FahrgestellNr,FN:KundenName,FN:AmtlKennzeichen,FN:KundenNr,BI:2001"

Get-ChildItem *.txt | Sort-Object $toNatural | % {
  if( $null -eq $output )
  {
    $id = (Get-Content $_ | Select-Object -First 1).ToString().Trim()
    if( ![string]::IsNullOrEmpty( $id ) )
    {
      $output = "$id.csv"
      $header > $output
    }
  }
  if( $null -ne $output )
  {
    "^" + ((Get-Content -Raw $_) -replace "[\r\n]+","^,^") + "^" >> $output
  }
}
Dann erstellt er dir den Dateinamen anhand der ersten Zeile der ersten Datei.
 
Zurück
Oben