Powershell CSV Problem - Leerzeichen entfernen
Guten Tag liebe Administratoren,
ich habe leider ein kleines Problem bei der Bearbeitung einer CSV mit Powershell. Die bereits einmal umgeformte CSV sieht in etwa wie folgt aus (weshalb die Hausnummern in der Spalte "Adresse 2" auch so komisch aussehen mit vorangestellten Nullen - leider weiß ich nicht woher diese Nullen kommen):
"Header 1 fix";"Header 2 fix";"Unternehmen";"Adresse 1";"Adresse 2";"Adresse 3";"Seriennummer"
"no";"yes";"Firma A ";"Hamburg ";"Bahnhofsstr. 0012";"20095";"1231231231"
"no";"yes";"Firma B ";"München ";"Goethestr. 0009";"80331";"1241244211"
"no";"yes";"Firma C ";"Berlin ";"Schillerstr. 0042";"10115";"2131233414"
"no";"yes";"Firma D ";"Hamburg ";"Am Rathaus 0002";"21033";"4561637631"
"no";"yes";"Firma E ";"Hamburg ";"Unter der Bruecke 0022";"21037";"0123456789"
Nun wollte ich mit einem Powershell Skript die überschüssigen Leerzeichen entfernen und das Ergebnis wieder als CSV speichern. Das hat auch funktioniert, nur leider hatte die neue Datei kein Carriage Return mehr und wurde als Single Line Datei dargestellt. Also in etwa so:
"Header 1 fix";"Header 2 fix";"Unternehmen";"Adresse 1";"Adresse 2";"Adresse 3";"Seriennummer";"no";"yes";"Firma A";"Hamburg";"Bahnhofsstr. 0012";"20095";"1231231231";"no";"yes";"Firma B";"München";"Goethestr. 0009";"80331";"1241244211"; usw....
Ich habe dern folgenden Code verwendet:
Ich habe es u.a. auch mit ConvertTo-CSV und Export-CSV versucht, aber die Ergebnisse waren noch merkwürdiger.
Ich habe leider bei Google auch nichts hilfreiches gefunden, in Powershell bis ich absoluter Anfänger. Ich wäre für jeden Tipp sehr dankbar!
Danke im Voraus und schönen Gruß,
narthan
ich habe leider ein kleines Problem bei der Bearbeitung einer CSV mit Powershell. Die bereits einmal umgeformte CSV sieht in etwa wie folgt aus (weshalb die Hausnummern in der Spalte "Adresse 2" auch so komisch aussehen mit vorangestellten Nullen - leider weiß ich nicht woher diese Nullen kommen):
"Header 1 fix";"Header 2 fix";"Unternehmen";"Adresse 1";"Adresse 2";"Adresse 3";"Seriennummer"
"no";"yes";"Firma A ";"Hamburg ";"Bahnhofsstr. 0012";"20095";"1231231231"
"no";"yes";"Firma B ";"München ";"Goethestr. 0009";"80331";"1241244211"
"no";"yes";"Firma C ";"Berlin ";"Schillerstr. 0042";"10115";"2131233414"
"no";"yes";"Firma D ";"Hamburg ";"Am Rathaus 0002";"21033";"4561637631"
"no";"yes";"Firma E ";"Hamburg ";"Unter der Bruecke 0022";"21037";"0123456789"
Nun wollte ich mit einem Powershell Skript die überschüssigen Leerzeichen entfernen und das Ergebnis wieder als CSV speichern. Das hat auch funktioniert, nur leider hatte die neue Datei kein Carriage Return mehr und wurde als Single Line Datei dargestellt. Also in etwa so:
"Header 1 fix";"Header 2 fix";"Unternehmen";"Adresse 1";"Adresse 2";"Adresse 3";"Seriennummer";"no";"yes";"Firma A";"Hamburg";"Bahnhofsstr. 0012";"20095";"1231231231";"no";"yes";"Firma B";"München";"Goethestr. 0009";"80331";"1241244211"; usw....
Ich habe dern folgenden Code verwendet:
(Get-Content -path 'C:\temp\test.csv' -Raw) -replace '\s{2,}',' ' | Set-Content -Path 'C:\temp\test1.csv'
Ich habe es u.a. auch mit ConvertTo-CSV und Export-CSV versucht, aber die Ergebnisse waren noch merkwürdiger.
Ich habe leider bei Google auch nichts hilfreiches gefunden, in Powershell bis ich absoluter Anfänger. Ich wäre für jeden Tipp sehr dankbar!
Danke im Voraus und schönen Gruß,
narthan
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 591192
Url: https://administrator.de/contentid/591192
Ausgedruckt am: 22.11.2024 um 05:11 Uhr
3 Kommentare
Neuester Kommentar
Der Computer macht nicht das was du willst, sondern das was du ihm sagst was er tun soll
\s steht für alle whitespaces, nciht nur für leer, daher ersetzt das -replace statement eben auch das newline+carrigereturn am ende (da es zwei aufeinanderfolgende whitespaces sind
Um es simpel zu halten, würde vermutlich das hier deinem wunsch ensprechen:
Wobei mit den CSV cmdlets es vermutlich sauberer wäre:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
Ansonsten hilft es immer im leben RegEx zu lernen:
https://www.regular-expressions.info/shorthand.html
\s steht für alle whitespaces, nciht nur für leer, daher ersetzt das -replace statement eben auch das newline+carrigereturn am ende (da es zwei aufeinanderfolgende whitespaces sind
Um es simpel zu halten, würde vermutlich das hier deinem wunsch ensprechen:
(Get-Content -path 'C:\temp\test.csv' -Raw) -replace ' {2,}',' ' | Set-Content -Path 'C:\temp\test1.csv'
Wobei mit den CSV cmdlets es vermutlich sauberer wäre:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
Ansonsten hilft es immer im leben RegEx zu lernen:
https://www.regular-expressions.info/shorthand.html
Mach am besten die original csv auf mit einem programm das dir alle zeichen anzeigt, soweit ichs im kopf habe macht dos/windows immer /r/n als "newline" - also carriage return + linefeed - die werden als zwei whitespaces interpretiert.
Aber nur so aus dem Kopf, schreib das mit dem Handy, kanns gerade nicht nachprüfen
Aber nur so aus dem Kopf, schreib das mit dem Handy, kanns gerade nicht nachprüfen