senfgurkensalat
Goto Top

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.

unbenannt


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 ?

Content-Key: 415674

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

Ausgedruckt am: 28.03.2024 um 21:03 Uhr

Mitglied: Kraemer
Kraemer 08.02.2019 aktualisiert um 17:11:54 Uhr
Goto Top
Moin,
Zitat von @Senfgurkensalat:
Was kann ich tun ?
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
Mitglied: Senfgurkensalat
Senfgurkensalat 08.02.2019 um 17:56:29 Uhr
Goto Top
In den CSV Dateien gibts es mehrere Spaltenüberschriften die zwei oder mehrfach vorkommen können. Wenn es die möglichkeit gäbe die Anzahl
der Spalten zu zählen und dann entsprechend durchnummeriert von 1..... X um zu benenen wäre mir schon geholfen.
Oder ich irgendwie anders alle mehrfach vorkommenden Spaltenüberschriften in eindeutige zu ändern.
Mitglied: 138721
138721 08.02.2019 aktualisiert um 18:23:02 Uhr
Goto Top
Wofür hat MS wohl den -Header Parameter erfunden ...? Genau, dafür ...
$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 face-smile

Gruß l.
Mitglied: 77559
77559 12.02.2019 um 15:56:26 Uhr
Goto Top
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)

$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
Mitglied: Senfgurkensalat
Senfgurkensalat 13.02.2019, aktualisiert am 17.02.2019 um 22:36:51 Uhr
Goto Top
Das klappt gut, aber ich habe in einigen Daten (die nicht gebraucht werden) HTML-Code stehen, mit einem Zeilenumbruch.
Nehme ich den Zeilenumbruch von Hand raus ist alles OK.

1;2;3;4;5;6;7;8;9;10;5;6
AAA1;BBB2;CCC3;DDD4;EEE5;FFF6;GGG7;HHH8;III9;"<h3>Basisqualifikation</h3>
<h3>Mini-/ Kinder</h3>";JJJ55;KKK66
AAA1;BBB2;CCC3;DDD4;EEE5;FFF6;GGG7;HHH8;III9;"<h3>Basisqualifikation</h3>
<h3>Mini-/ Kinder</h3>";JJJ55;KKK66
AAA1;BBB2;CCC3;DDD4;EEE5;FFF6;GGG7;HHH8;III9;"<h3>Basisqualifikation</h3>
<h3>Mini-/ Kinder</h3>";JJJ55;KKK66
AAA1;BBB2;CCC3;DDD4;EEE5;FFF6;GGG7;HHH8;III9;"<h3>Basisqualifikation</h3>
<h3>Mini-/ Kinder</h3>";JJJ55;KKK66

die versauen alles :

"H1";"H2";"H4";"H5"
"AAA1";"BBB2";"CCC4";"DDD5"
"<h3>Mini-/ Kinder</h3>""";"JJJ55";;
"AAA1";"BBB2";"CCC4";"DDD5"
"<h3>Mini-/ Kinder</h3>""";"JJJ55";;
"AAA1";"BBB2";"CCC4";"DDD5"
"<h3>Mini-/ Kinder</h3>""";"JJJ55";;
"AAA1";"BBB2";"CCC4";"DDD5"
"<h3>Mini-/ Kinder</h3>""";"JJJ55";;

Hast du nochmal eine Idee ?
Mitglied: 77559
77559 22.02.2019 um 14:25:53 Uhr
Goto Top
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