komoran12
Goto Top

Bestimmte Spalten aus CSV in andere CSV kopieren?

Moin, moin,

bisher habe ich nachfolgendes Batch dafür genutzt, dass bestimmte Spalten aus einer CSV in eine andere kopiert werden:

powershell -Executionpolicy ByPass -Command "$newcsv = @();import-csv $env:USERPROFILE\Desktop\Skripte\test.csv -Delimiter ';' -Encoding Default | %%{$newcsv += [pscustomobject] ([ordered] @{'TEST1'=$_.'TEST1';'TEST2'=$_.'TEST2';'TEST3'=$_.'TEST3'})};$newcsv | Export-Csv $env:USERPROFILE\Desktop\Skripte\test_sort.csv -Delimiter ';' -NoTypeInformation -Encoding Default"  

Jetzt ist mein Wunsch, dass ich nicht die Spaltenbezeichnung nehme, sondern bspw. die 1. - 3. - 4. Spalte für den "Export" - ist das möglich?

Content-ID: 366264

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

Ausgedruckt am: 23.11.2024 um 13:11 Uhr

colinardo
Lösung colinardo 27.02.2018 um 14:19:26 Uhr
Goto Top
Servus,
kein Thema
powershell -Executionpolicy ByPass -Command "(import-csv $env:USERPROFILE\Desktop\Skripte\test.csv -Delimiter ';' -Encoding Default) | Select NameSpalte1,NameSpalte3,NameSpalte4 | Export-Csv $env:USERPROFILE\Desktop\Skripte\test_sort.csv -Delimiter ';' -NoTypeInformation -Encoding Default"  
Grüße Uwe
Komoran12
Komoran12 27.02.2018 um 14:59:34 Uhr
Goto Top
Moin Uwe,

NameSpalte1 = TEST1
oder NameSpalte1 = A

Ich würde halt gerne Spalte A, Spalte C usw. auswählen können.

Gruß.
colinardo
colinardo 27.02.2018 aktualisiert um 15:08:53 Uhr
Goto Top
?? Du meinst damit das ein und die selbe Spalte unterschiedliche Namen haben können? Wenn das der Fall ist setze bei Import-CSV mit dem Parameter -Header feste Namen für die Spalten und setze diese dann im Select ebenfalls ein.

Ansonsten siehst du ja oben wie du die unterschiedlichen Spalten anhand des Namens im Select auswählst, ganz einfach den Namen der Spalte wie der in der ersten Zeile der CSV steht angeben, fertig!
Komoran12
Komoran12 27.02.2018 um 15:48:44 Uhr
Goto Top
Ich glaube ich drücke mich nicht richtig aus;
Excel Nummeriert doch die Spalten mit A, B, C, usw.

Ich kann ja jetzt nicht mit dem Code-Schnipsel:

powershell -Executionpolicy ByPass -Command "(import-csv $env:USERPROFILE\Desktop\Skripte\test.csv -Delimiter ';' -Encoding Default) | Select NameSpalte1,NameSpalte3,NameSpalte4 | Export-Csv $env:USERPROFILE\Desktop\Skripte\test_sort.csv -Delimiter ';' -NoTypeInformation -Encoding Default"  

Spalte A, B, C usw. abfragen?

powershell -Executionpolicy ByPass -Command "(import-csv $env:USERPROFILE\Desktop\Skripte\test.csv -Delimiter ';' -Encoding Default) | Select A,B,C| Export-Csv $env:USERPROFILE\Desktop\Skripte\test_sort.csv -Delimiter ';' -NoTypeInformation -Encoding Default"  

Das Problem ist hierbei, dass ich hierbei 2 Spalten haben, die gleich benannt wurde, da der CSV Export aus einem System kommt, den ich nicht beeinflussen kann. Dadurch dass 2 Spalten den gleichen Namen haben, kommt es zu Problemen....
colinardo
Lösung colinardo 27.02.2018 aktualisiert um 16:12:15 Uhr
Goto Top
Ich hatte dir oben zwar scchon den Hinweis geliefert wie du es in deinem Fall machen musst wenn es identische Namen gibt aber naja hier nochmal in Codeform:
powershell -Executionpolicy ByPass -Command "gc $env:USERPROFILE\Desktop\Skripte\test.csv -Encoding Default | select -skip 1 | ConvertFrom-CSV -Delimiter ';' -Header A,B,C,D | Select A,C,D| Export-Csv $env:USERPROFILE\Desktop\Skripte\test_sort.csv -Delimiter ';' -NoTypeInformation -Encoding Default"  
Was du hier machst ist folgendes, es wird die CSV erst einmal als normales Zeilenarray geladen (Get-Content), dann wird die Überschriftenzeile übersprungen (Da diese ja nicht kompatible Infos enthält), dann wird diese wieder in ein Objekt überführt inkl. Angabe neuer Spaltenbezeichner welche du dann im Select-Befehl auswählen kannst wie du willst.
Komoran12
Komoran12 28.02.2018 um 12:50:34 Uhr
Goto Top
Moin colinardo,

das klappt jetzt; allerdings habe ich da noch eine kleine Frage zu:

powershell -Executionpolicy ByPass -Command "gc $env:USERPROFILE\Desktop\Skripte\test.csv -Encoding Default | select -skip 1 | ConvertFrom-CSV -Delimiter ';' -Header A,B,C,D | Select A,C,D| Export-Csv $env:USERPROFILE\Desktop\Skripte\test_sort.csv -Delimiter ';' -NoTypeInformation -Encoding Default"  

Kann ich die Spalten nach dem "Select" auch wieder umbennenen?
colinardo
Lösung colinardo 28.02.2018 aktualisiert um 13:16:03 Uhr
Goto Top
Kannst du direkt im Select machen mit einer Calculated Property.
powershell -Executionpolicy ByPass -Command "gc $env:USERPROFILE\Desktop\Skripte\test.csv -Encoding Default | select -skip 1 | ConvertFrom-CSV -Delimiter ';' -Header A,B,C,D | Select @{n='SpalteA';e={$_.A}},@{n='SpalteC';e={$_.C}},@{n='SpalteD';e={$_.D}}| Export-Csv $env:USERPROFILE\Desktop\Skripte\test_sort.csv -Delimiter ';' -NoTypeInformation -Encoding Default"