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-Key: 366264

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

Printed on: April 23, 2024 at 11:04 o'clock

Member: colinardo
Solution colinardo Feb 27, 2018 at 13:19:26 (UTC)
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
Member: Komoran12
Komoran12 Feb 27, 2018 at 13:59:34 (UTC)
Goto Top
Moin Uwe,

NameSpalte1 = TEST1
oder NameSpalte1 = A

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

Gruß.
Member: colinardo
colinardo Feb 27, 2018 updated at 14:08:53 (UTC)
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!
Member: Komoran12
Komoran12 Feb 27, 2018 at 14:48:44 (UTC)
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....
Member: colinardo
Solution colinardo Feb 27, 2018 updated at 15:12:15 (UTC)
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.
Member: Komoran12
Komoran12 Feb 28, 2018 at 11:50:34 (UTC)
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?
Member: colinardo
Solution colinardo Feb 28, 2018 updated at 12:16:03 (UTC)
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"