# Powershell - Group by



## warface (8. Dezember 2017)

Hallo zusammen,

ich baue zur Zeit einen Converter mit dem ich csv-Dateien in ein EDI-Format umwandeln kann.
Leider krieg ich die Gruppierung nicht hin, vielleicht kann mir ja jemand einen Tipp geben 

CSV-Beispielstruktur

Datum;Liefantnr;Lieferantname;Lieferscheinnr;Port;Position;ArtikelNR;Artikel;Menge;Preis;AuftragGPreis
01.01.17;100001;LieferanABCD;20000011411;9,99€;000001;99998888;Muster;000001;9,99;27,97
01.01.17;100001;LieferanABCD;20000011411;9,99€;000002;99998887;Demo1;000002;8,99;27,97
01.01.17;100001;LieferanABCD;20000011412;5,99€;000001;99998888;Muster;000001;9,99;9,99
01.01.17;100221;LieferanEFGH;20000011415;9,99€;000001;77998888;Kugel;000001;9,99;9,99
02.01.17;100001;LieferanABCD;20000011413;9,99€;000001;99998888;Muster;000001;9,99;9,99

Ergebnis sollte dann z.B.
01.01.17
100001|LieferanABCD
20000011411|9,99€
000001|99998888|Muster|000001|9,99
000002|99998887|Demo1|000001|8,99
27,97
01.01.17
100001|LieferanABCD
20000011412|5,99€
000001|99998888|Muster|000001|9,99
9,99
01.01.17
100221|LieferanEFGH
20000011415|9,99€
000001|77998888|Kugel|000001|9,99
9,99
02.01.17
100001|LieferanABCD
20000011413|9,99€
000001|99998888|Muster|000001|9,99
9,99

hierbei handelt es sich lediglich um ein kleines Beispiel.
So habe ich das bisher umgesetzt und es hat auch funktioniert, weil in einer Datei nur ein Auftag mit mehreren Positionen war.
Die Dateien beihalten nun mehrere Aufträge und da komme ich nicht weiter.

Hier ein Ausschnitt aus meinem Quellcode

```
if ($filename -eq "") {
    $filename= $NewFilename, $210_uebdat, $210_lief_name_1  -join "_"
    }
    # $ADRESSDATEN
    if ($ADRESSDATEN -eq "") {
    $ADRESSDATEN = $210_vda_satzart ,$210_vda_version,$210_uebnr,$210_uebnr_alt,$210_uebdat,$210_satzart,$210_konto,$210_lfnr_kdnr,$210_fi_nr,$210_lief_name_1,$210_lief_name_2,$210_lief_name_3,$210_lief_strasse,$210_lief_plz,$210_lief_ort,$210_lief_kzland,$210_lief_ust_identnr,$210_iln,$210_dummy -join ""
    }
    # $AUFTRAGSDATEN
    if ($AUFTRAGSDATEN -eq "") {
    $AUFTRAGSDATEN = $220_vda_satzart,$220_vda_version,$220_ls_nr,$220_ls_dat,$220_kd_name_1,$220_kd_name_2,$220_kd_name_3,$220_kd_strasse,$220_kd_plz,$220_kd_ort,$220_kd_land,$220_sendnr,$220_send_dat,$220_lief_term,$220_lb,$220_vers_art,$220_sb_name,$220_dummy -join ""
    }
    # $AUFTRAGABSCHLUSS
    if ($AUFTRAGABSCHLUSS -eq "") {
    $AUFTRAGABSCHLUSS = '24001' -join ""
    }
    # $ABSCHLUSS
    if ($ABSCHLUSS -eq "") {
    $ABSCHLUSS = '25001' -join ""
    }
    # $POSITIONEN
    $POSITION = $230_vda_satzart,$230_vda_version,$230_aufnr,$230_auf_dat,$230_best_nr,$230_best_dat,$230_identnr,$230_var,$230_kdidentnr,$230_kdvar,$230_menge_gel,$230_me,$230_gewicht,$230_aufpos,$230_ean,$230_kd_zeichnr,$230_kd_zeichidx,$230_kd_aendkonstr,$230_kostst -join ""
    $POSITIONEN += $POSITION
}
  
##############Datei schreiben##############
################ZielPfand##################
    $target = "$ZielVerzeichnis$filename.txt"
  
    Out-File -FilePath $target -Encoding default -InputObject $ADRESSDATEN, $AUFTRAGSDATEN
    $POSITIONEN | %{
    Out-File -FilePath $target -Append -InputObject $_ -Encoding default
    }
    Out-File -FilePath $target -Encoding default -Append -InputObject $AUFTRAGABSCHLUSS
    Out-File -FilePath $target -Encoding default -Append -InputObject $ABSCHLUSS}
```


----------



## ComFreek (11. Dezember 2017)

Hi,

es wäre hilfreich, wenn du sagst, welche Variable was genau speichert. Am besten ein Minimal Working Example, du hast die Testdaten ja bereits geposted


----------



## warface (11. Dezember 2017)

@ComFreek  Danke für dein Feedback

so würde der Quellcode basierend auf dem Beispiel aussehen 
bisher gab es pro Datei nur einen Header und mehrere dazugehörige Positionen.
nun gibt es pro Datei auch mehrere Aufträge.


```
if ($filename -eq "") {
    $filename= "Lieferscheine",$Datum  -join "_"
    }
    # $ADRESSDATEN
    if ($ADRESSDATEN -eq "") {
    $ADRESSDATEN = $Lieferantnr, $Lieferantname -join "|"
    }
    # $AUFTRAGSDATEN
    if ($AUFTRAGSDATEN -eq "") {
    $AUFTRAGSDATEN = $Datum, $Lieferscheinnr, $Porto -join "|"
    }
    # $AUFTRAGABSCHLUSS
    if ($AUFTRAGABSCHLUSS -eq "") {
    $AUFTRAGABSCHLUSS = $AuftragGPreis -join "|"
    }
    # $ABSCHLUSS
    if ($ABSCHLUSS -eq "") {
    $ABSCHLUSS = "ENDE" -join ""
    }
    # $POSITIONEN
    $POSITION = $Position, $ArtikelNR, $Artikel, $Menge, $Preis -join "|"
    $POSITIONEN += $POSITION
    }
##############Datei schreiben##############
################ZielPfand##################
    $target = "$ZielVerzeichnis$filename.txt"
    Out-File -FilePath $target -Encoding default -InputObject $ADRESSDATEN, $AUFTRAGSDATEN
    $POSITIONEN | %{
    Out-File -FilePath $target -Append -InputObject $_ -Encoding default
    }
    Out-File -FilePath $target -Encoding default -Append -InputObject $AUFTRAGABSCHLUSS
    Out-File -FilePath $target -Encoding default -Append -InputObject $ABSCHLUSS}
```


----------



## warface (18. Dezember 2017)

hat keiner eine Idee wie man da ran gehen könnte?
Ein Beispiel mit einer Datei, die mehrere Gruppierungen hat, würde mir sicherlich auch schon weiterhelfen.


----------

