CSV Datei mit doppelter Spaltenüberschriften und unbekannter Spaltenanzahl
Ich hab CSV Dateien deren Spaltenanzahl variiert, aus der ich aber immer die gleichen fünf Spalten benötige. So habe ich folgenden Code gefunden, um die nicht benötigten Spalten zu löschen.
Jetzt stellt sich heraus, das einige (nicht benötigte) Spalten doppelt vorkommen und ich somit einen Fehler bekomme.
powershell -Executionpolicy ByPass -command "(Import-CSV 'd:\Test1.csv' -delimiter ';')
| select 'Kursnummer','Header1','Header2','Header4','Header5'
| export-csv 'd:\TMP\datei_export.csv' -delimiter ';' -NoType -Encoding UTF8"
Beispeil: Header1; Header2; Header3; Header4; Header5; Header6; Header7; Header8; Header7
ich möchte aber nur Header1; Header2; Header4; Header5 haben.
Was kann ich tun ?
Jetzt stellt sich heraus, das einige (nicht benötigte) Spalten doppelt vorkommen und ich somit einen Fehler bekomme.
powershell -Executionpolicy ByPass -command "(Import-CSV 'd:\Test1.csv' -delimiter ';')
| select 'Kursnummer','Header1','Header2','Header4','Header5'
| export-csv 'd:\TMP\datei_export.csv' -delimiter ';' -NoType -Encoding UTF8"
Beispeil: Header1; Header2; Header3; Header4; Header5; Header6; Header7; Header8; Header7
ich möchte aber nur Header1; Header2; Header4; Header5 haben.
Was kann ich tun ?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 415674
Url: https://administrator.de/forum/csv-datei-mit-doppelter-spaltenueberschriften-und-unbekannter-spaltenanzahl-415674.html
Ausgedruckt am: 02.05.2025 um 03:05 Uhr
6 Kommentare
Neuester Kommentar
Moin,
du musst den Header vor dem Import reparieren! Da du nichts davon schreibst, ob es sich immer um die selbe Spalte handelt, oder ob das Problem mehrfach auftreten kann, fällt es schwer zielführend zu helfen.
Gruß
PS:
Mal ein Beispiel (nicht von mir)
du musst den Header vor dem Import reparieren! Da du nichts davon schreibst, ob es sich immer um die selbe Spalte handelt, oder ob das Problem mehrfach auftreten kann, fällt es schwer zielführend zu helfen.
Gruß
PS:
Mal ein Beispiel (nicht von mir)
$filename=’C:\Temp\Quelle.csv‘
[regex]$pattern=’"Kommentar"‘
$c=$pattern.Replace([IO.File]::ReadAllText($filename),’"Kommentar1"‘,1)
[regex]$pattern=’"Originalbetrag"‘
$c=$pattern.Replace($c,’"Originalbetrag1"‘,1)
$c|set-content (Join-Path (Split-Path $filename) HeaderOK.csv) -Encoding UTF8

Wofür hat MS wohl den -Header Parameter erfunden ...? Genau, dafür ...

Gruß l.
$quelle = 'd:\Test1.csv'
$ziel = 'd:\TMP\datei_export.csv'
gc $quelle | select -skip 1 | ConvertFrom-CSV -Delimiter ";" -Header (1..(gc $quelle -TotalCount 1).Split(";").Count) | select "1","2","4","5" | export-csv $ziel -Encoding UTF8 -NoTypeInformation -Delimiter ";"
Was kann ich tun ?
Weniger Senfgurkensalat essen Gruß l.

Wenn der höchste benötigte Header Header5 ist, braucht man beim Import-/ConvertFrom-Csv auch nicht mehr anzugeben; überzählige Felder werden ignoriert.
Nicht benötigte Header kann man ausschließen mit -ExcludeProperty (man muß aber dann alle Anderen -Property * selektieren)
Gruß
LotPings
Nicht benötigte Header kann man ausschließen mit -ExcludeProperty (man muß aber dann alle Anderen -Property * selektieren)
$quelle = 'd:\Test1.csv'
$ziel = 'd:\TMP\datei_export.csv'
Get-Content $quelle | Select-Object -Skip 1 |
ConvertFrom-CSV -Header (1..5|%{"H$_"}) -Delimiter ';' |
Select-Object -Property * -ExcludeProperty H3 |
Export-Csv $ziel -Encoding UTF8 -NoTypeInformation -Delimiter ";"
Gruß
LotPings

Sorry für späte Reaktion,
Ich werde aus deinen Daten nicht so ganz schlau,
bereinigen müsstest du die schon vorher,
das geht auch automatisiert aber dann solltest du ein paar möglichst originale/neutralisierte Daten zeigen.
Und zwar in
< code > < /code >
oder
< code type=plain > </code >
Tags eingebettet.
Gruß
LotPings
Ich werde aus deinen Daten nicht so ganz schlau,
bereinigen müsstest du die schon vorher,
das geht auch automatisiert aber dann solltest du ein paar möglichst originale/neutralisierte Daten zeigen.
Und zwar in
< code > < /code >
oder
< code type=plain > </code >
Tags eingebettet.
Gruß
LotPings