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

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

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

Member: Matikj54
Matikj54 Apr 01, 2021 at 10:20:18 (UTC)
Goto Top
Haben Sie eine Lösung für Ihr Problem gefunden?
Member: freshman2017
freshman2017 Apr 01, 2021 at 10:35:18 (UTC)
Goto Top
Nein, ich suche noch nach einer Lösung.
Member: chkdsk
chkdsk Apr 01, 2021 updated at 10:38:55 (UTC)
Goto Top
Solche Zusammenfassungen lassen sich auch direkt in Excel Abbilden unter dem Karteireiter "Daten"
Stichwort: Power Query
Member: freshman2017
freshman2017 Apr 01, 2021 at 10:39:38 (UTC)
Goto Top
Ich suche jedoch nach einer Lösung, ide über Batch/Powershell abläuft.
Member: TK1987
Solution TK1987 Apr 01, 2021 updated at 10:48:47 (UTC)
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
Member: freshman2017
freshman2017 Apr 01, 2021 updated at 11:06:21 (UTC)
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.
Member: TK1987
TK1987 Apr 01, 2021 at 11:24:12 (UTC)
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
Member: freshman2017
freshman2017 Apr 01, 2021 at 11:51:20 (UTC)
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;;;;;;;;;;;;;;;;;;
Member: TK1987
TK1987 Apr 01, 2021 updated at 11:58:07 (UTC)
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
Mitglied: 148121
Solution 148121 Apr 01, 2021 updated at 12:18:59 (UTC)
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.
Member: TK1987
TK1987 Apr 01, 2021 at 12:22:11 (UTC)
Goto Top
Stimmt, so gehts natürlich auch. Auf de Idee bin ich grad gar nicht gekommen.