thesystemlord
Goto Top

Powershell CSV Datei erste Spalte Text hinzufügen?

Hallo,

ich habe hier eine 12 MB große Text Datei mit 63042 Zeilen

Die ersten Zeile sieht wie folgt aus:

Art.Nr.;EAN;Herst.Nr.;HWGR_BEZEICHNUNG;HERSTELLER;MWST;Bez. 1;Bez. 2;Mindestmenge;Kat.Seite;ME;EK;VK;Staffel-EK 1;Menge Staffel-EK 1;Staffel-EK 2;Menge Staffel-EK 2;Staffel-VK 1;Menge Staffel-VK 1;Staffel-VK 2;Menge Staffel-VK 2;WGR_BEZEICHNUNG;Lager/Streckenart;Status;Skontofaehig

Zweite Zeile sind ja dann die Daten:
766431;4004360957956;HN614;Bürobedarf;XX;XX;XX

Es müsste jetzt vor der Art.Nr (766431) immer der Text AL hinzugefügt werden (AL766431). Die Original Datei könnte ggf. ersetzt werden.

Die Original Datei ist im Format ANSI soll dann aber im UTF8 speichert werden. Das hier hab ich schon gefunden und funktioniert:


# Lade die CVS-Datei als Text
$text = Get-Content -Path 'c:\dateiname.csv' -Encoding Default  

# Konvertiere den Text von ANSI zu UTF-8
$utf8Text = [System.Text.Encoding]::UTF8.GetString([System.Text.Encoding]::Default.GetBytes($text))

# Schreibe den konvertierten Text in eine neue CVS-Datei im Format UTF-8
$utf8Text | Set-Content -Path 'c:\dateiname.csv' -Encoding UTF8  


Besten Dank schon mal für die Tipps!

Content-Key: 5019375548

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

Printed on: April 29, 2024 at 10:04 o'clock

Mitglied: 4863114660
Solution 4863114660 Dec 19, 2022, updated at Dec 20, 2022 at 07:34:43 (UTC)
Goto Top
Middaach.

Täglich grüßt das Murmeltier ...

(Konvertierung von ANSI auf UTF8 ist bei beiden u.s. Lösungen schon enthalten, geht also von ANSI Quelldaten aus, ansonsten einfach den "-Encoding" Parameter von Import-CSV anpassen )

Ausführlich
# Dateipfad
$file = "C:\dateiname.csv"  
# ANSI CSV importieren
$csv = Import-CSV $file -Delimiter ";" -Encoding Default   
# lines ändern
foreach($line in $csv){$line.'Art.Nr.' = "AL" + $line.'Art.Nr.'}  
# CSV i UTF8 Format exportieren
$csv | export-csv $file -Delimiter ";" -NoTypeInformation -Encoding UTF8  
Oder als Oneliner
(Import-CSV "C:\dateiname.csv" -Delimiter ";" -Encoding Default) | %{$_.'Art.Nr.' = "AL" + $_.'Art.Nr.';$_} | export-csv "C:\dateiname.csv" -Delimiter ";" -NoTypeInformation -Encoding UTF8  
Oder als Alternative ohne Umwandlung in Object mit bisl Regex (schneller)
(Get-Content -Path 'c:\dateiname.csv' -Encoding Default -Raw -ReadCount 1000) -replace '(?m)^\d','AL$0' | Set-Content 'c:\dateiname.csv' -Encoding UTF8  
Oder direkt mit sed (am schnellsten)
 sed -rie 's/^[0-9]/AL\0/' dateiname.csv  
Such dir aus was dir gefällt.

Gruß S.

p.s. Tante Edith: Tippfehler bei Spaltennamen korrigiert
Member: erikro
erikro Dec 20, 2022 at 07:57:49 (UTC)
Goto Top
Moin,

Zitat von @TheSystemlord:
Art.Nr.;EAN;Herst.Nr.;HWGR_BEZEICHNUNG;HERSTELLER;MWST;Bez. 1;Bez.


Punkte im Spaltennamen? Wer macht denn sowas?

Liebe Grüße

Erik
Mitglied: 4863114660
4863114660 Dec 20, 2022 updated at 08:41:07 (UTC)
Goto Top
Zitat von @erikro:
Punkte im Spaltennamen? Wer macht denn sowas?
Das ist ja ehrlich gesagt noch harmlos. Da habe ich schon andere Schweinereien wie Zeilenumbrüche oder Spaltennamen die fast ein Roman hätten sein können im Header gesehen😅.
Und die Deppen die immer wieder Semikolons am Ende der letzten Spalte setzen gehören auch allesamt mal kastriert 🐿️.

Frohe Weihnachtswoche allerseits.

Gruß s.
Member: TheSystemlord
TheSystemlord Dec 22, 2022 at 08:24:20 (UTC)
Goto Top
Heheh, ja das hab ich aber dann noch hinbekommen face-smile Vielen Dank & schöne Feiertage! Läuft super soweit.