freshman2017
Goto Top

Batch für CSV Zusammenfassung

Guten Tag kurz vor Ostern,

Gibt es eine Möglichkeit ggf. mit einem Code-Schnippsel aus Powershell Werte aus einer CSV Datei zusammenzufassen, wenn der Wert in der 1. Spalte immer gleich ist? Sprich immer den Wert aus der letzten Spalte zusammenfassen. Die Anzahl der gleichen Datensätze ist auf max 20 Datensätze pro gleichem Wert begrenzt.

Quell CSV Datei:

TEST;1234;5456151321321;
TEST;1234;3456151321321;
TEST;1234;3456151321321;
TEST1;1234;5456151321321;
TEST1;1234;3456151321321;
TEST1;1234;3456151321321;

Ziel CSV Datei:

TEST;WAHR;5456151321321;3456151321321;3456151321321;;;;;;;;;;;;;;;;;;
TEST1;WAHR;5456151321321;3456151321321;3456151321321;;;;;;;;;;;;;;;;;;

Liebe Ostergrüße!

Content-ID: 665324

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

Ausgedruckt am: 21.11.2024 um 21:11 Uhr

Matikj54
Matikj54 01.04.2021 um 12:20:18 Uhr
Goto Top
Haben Sie eine Lösung für Ihr Problem gefunden?
freshman2017
freshman2017 01.04.2021 um 12:35:18 Uhr
Goto Top
Nein, ich suche noch nach einer Lösung.
chkdsk
chkdsk 01.04.2021 aktualisiert um 12:38:55 Uhr
Goto Top
Solche Zusammenfassungen lassen sich auch direkt in Excel Abbilden unter dem Karteireiter "Daten"
Stichwort: Power Query
freshman2017
freshman2017 01.04.2021 um 12:39:38 Uhr
Goto Top
Ich suche jedoch nach einer Lösung, ide über Batch/Powershell abläuft.
TK1987
Lösung TK1987 01.04.2021 aktualisiert um 12:48:47 Uhr
Goto Top
Moin,

$Source = 'C:\Test\File.CSV'  

$CSV = Import-CSV -Path $Source -d ';' -Header (1..3)  
Foreach ($Obj in ($CSV.1|Select -unique)) {
  [Array]$Out += "{0};WAHR;{1}" -f $Obj,(($CSV | Where-Object 1 -eq $Obj).3 -Join ';')  
}
$Out | Set-Content -Enc utf8 "C:\Test\NewFile.csv"  

Schöne Ostergrüße zurück.

Gruß Thomas
freshman2017
freshman2017 01.04.2021 aktualisiert um 13:06:21 Uhr
Goto Top
Moin Thomas,

ich habe es gerade mal getestet:

file.csv

TEST;1234;5456151321321;
TEST;1234;3456151321321;
TEST;1234;3456151321321;
TEST1;1234;5456151321321;
TEST1;1234;3456151321321;
TEST1;1234;3456151321321;

NewFile.csv

TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
TEST;WAHR;5456151321321;3456151321321;3456151321321;
TEST1;WAHR;5456151321321;3456151321321;3456151321321;
TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
TEST;WAHR;5456151321321
TEST;WAHR;5456151321321
TEST;WAHR;5456151321321;
TEST;WAHR;5456151321321;3456151321321;3456151321321;
TEST1;WAHR;5456151321321;3456151321321;3456151321321;

Rausbekommen möchte ich aber folgendes:

TEST;WAHR;5456151321321;3456151321321;3456151321321;;;;;;;;;;;;;;;;;;
TEST1;WAHR;5456151321321;3456151321321;3456151321321;;;;;;;;;;;;;;;;;;

Wenn ich 20 gleiche Datensätze habe, habe ich demnach keine leeren spalten am ende.
TK1987
TK1987 01.04.2021 um 13:24:12 Uhr
Goto Top
Zitat von @freshman2017:
NewFile.csv

TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
...
Wieso hast du so viele Zeilen? Wenn ich das mit deiner file.csv ausführe, bekomme ich nur
TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
Siehe auch tio.run
freshman2017
freshman2017 01.04.2021 um 13:51:20 Uhr
Goto Top
Habe den Fehler bei mir gefunden, vielen Dank.

In meiner file.csv können maximal 20 Datensätze mit den gleichen Werten in der ersten Spalte stehen.

Kann das Skript abfangen, dass wenn ich nur 3 gleiche Datensätze habe, dass er mit npch 17 leere Spalten hinzufügt?

TEST;WAHR;5456151321321;3456151321321;3456151321321;;;;;;;;;;;;;;;;;;
TEST1;WAHR;5456151321321;3456151321321;3456151321321;;;;;;;;;;;;;;;;;;
TK1987
TK1987 01.04.2021 aktualisiert um 13:58:07 Uhr
Goto Top
Das könnte man z.B. ganz leicht erreichen, indem man den Output nochmal durch den CSV-Converter jagt:
$Out | ConvertFrom-CSV -d ';' -Header (1..22) | ConvertTo-CSV -d ';' -NoTypeInfo | Select -skip 1 | Set-Content "C:\Test\NewFile.CSV"  
tio.run
148121
Lösung 148121 01.04.2021 aktualisiert um 14:18:59 Uhr
Goto Top
Ich würde es gleich mit Group-Object abfackeln 😉
https://tio.run/##lY5NC4JAEIbv/opBDDVccV3tsgSG9HHqkFLHkNy@UFdWrcPmbzelSw ...

Da der Jung das wohl wieder als Batch/Powershell Mischmasch haben will hier der Batch-Einzeiler dazu
@echo off
powershell -EP Bypass -C "Import-CSV 'D:\datei.csv' -d ';' -Head (1..3) | group '1' | %%{'{0};WAHR;{1}{2}' -f $_.Name,($_.Group.3 -join ';'),(';'*(20 - $_.Count))}"  

Gruß w.
TK1987
TK1987 01.04.2021 um 14:22:11 Uhr
Goto Top
Stimmt, so gehts natürlich auch. Auf de Idee bin ich grad gar nicht gekommen.