forseti2003
Goto Top

PowerShell - strukturierte Ausgabe in XML

Hallo,

ich hab da ein kniffliges Problem und weiß nicht, ob ich es überhaupt mit PowerShell gelöst bekomme.
Ich möchte eine Datei auslesen und als XML ausgeben. In der Datei sind Rechnungen enthalten und haben mehrere Lieferscheine. Die Lieferscheine können aber unterschiedliche Monate zu einem Beleg haben und ich würde gerne pro Monat und Beleg eine Datei ausgeben.

Hier mal der Dateiaufbau:

Satzart;AA;AB;AC;AD
801;1000;01.06.2021;5600;EUR
802; ;1000;INFO 123;01.06.2021;500
802; ;1000;INFO 123;31.05.2021;400
802; ;1000;INFO 456;01.06.2021;350
801;1001;01.06.2021;5600;EUR
802; ;1001;INFO 456;28.05.2021;123
802; ;1001;INFO 456;29.05.2021;124
802; ;1001;INFO 123;01.06.2021;405

Die geplanten Dateien sollten dann so aussehen:

XML-Datei 1: 1000-05 (Darin Position "400")
XML-Datei 2: 1000-06 (Darin Position "500" + "350")
XML-Datei 3: 1001-05 (Position 123+124)
XML-Datei 4: 1001-06 (Position 405)

Meine Idee wäre jetzt auf die Satzart 802 zuzugreifen, aus AA+AC die Belegnummer zu bilden und dann über eine Funktion auf die Daten der Satzart 801 zuzugreifen.
Wenn ich aber jetzt in die dritte 802-Zeile komme, würde er ja die bestehende Datei überschreiben oder kann ich das irgendwie puffern, bis ich durchgelaufen bin und dann weiterschreiben?

Vielleicht denke ich jetzt auch nur zu kompliziert.

Content-ID: 782325539

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

Ausgedruckt am: 22.11.2024 um 09:11 Uhr

H41mSh1C0R
H41mSh1C0R 23.06.2021 um 17:39:40 Uhr
Goto Top
Hi,

Dann machen wir doch gleich mal Gebrauch vom neuen Powershell Leitfaden. =)

Powershell Leitfaden für Anfänger

VG
Forseti2003
Forseti2003 23.06.2021 um 17:50:45 Uhr
Goto Top
und auf welchen Link in diesem "Anfänger"-Guide beziehst Du Dich jetzt genau?
H41mSh1C0R
H41mSh1C0R 23.06.2021 um 17:58:28 Uhr
Goto Top
Wenn du so fragst, dann wohl Kapitel 1.

Oder suchst du dir nur jemanden der deine Hausaufgaben macht?
colinardo
Lösung colinardo 23.06.2021 aktualisiert um 18:42:35 Uhr
Goto Top
Servus @Forseti2003,
für solche Sachen eignet sich das CMDLet group-object hervorragend.

Hier ein nur Beispiel für deine Daten da die Struktur deiner XML uns ja nicht bekannt ist

CSV-Datei
Satzart;AA;AB;AC;AD
801;1000;01.06.2021;5600;EUR
802;1000;INFO 123;01.06.2021;500
802;1000;INFO 123;31.05.2021;400
802;1000;INFO 456;01.06.2021;350
801;1001;01.06.2021;5600;EUR
802;1001;INFO 456;28.05.2021;123
802;1001;INFO 456;29.05.2021;124
802;1001;INFO 123;01.06.2021;405
Dazugehöriger Code
# CSV Datei
$infile = 'D:\data\data2021.csv'  
# Ausgabeordner für die XML Dateien
$outfolder = 'D:\data'  
# CSV Datei importieren
$csv = Import-CSV $infile -Delimiter ";"  
# CSV Daten nach Satz filtern und nach Vorgabe gruppieren
$csv | ? Satzart -eq '802' | group {$_.AA + "-" + $_.AC.split('.')[1]} | %{  
    # xml object erstellen
    $xml = [xml]'<?xml version="1.0" encoding="utf-8"?><Entries></Entries>'  
    # Gruppeneinträge  durchlaufen und der XML Datei zusätzliche Elemente hinzufügen
    $_.Group | %{
        $entry = $xml.CreateElement('Entry')  
        $info = $xml.CreateElement('Info')  
        $info.InnerText = $_.AB
        $datum = $xml.CreateElement('Datum')  
        $datum.innerText = $_.AC
        $betrag = $xml.CreateElement('Betrag')  
        $betrag.innerText = $_.AD
        $entry.AppendChild($info)
        $entry.AppendChild($datum)
        $entry.AppendChild($betrag)
        $xml.DocumentElement.AppendChild($entry)
    } | out-null
    # Xml Datei im Ausgabepfad ablegen
    $xml.Save((join-path $outfolder ($_.Name + '.xml')))  
}
ergibt dann solche Files
<?xml version="1.0" encoding="utf-8"?>
<Entries>
  <Entry>
    <Info>INFO 123</Info>
    <Datum>01.06.2021</Datum>
    <Betrag>500</Betrag>
  </Entry>
  <Entry>
    <Info>INFO 456</Info>
    <Datum>01.06.2021</Datum>
    <Betrag>350</Betrag>
  </Entry>
</Entries>
Falls sich dazu Fragen ergeben, einfach los schreiben.

Grüße Uwe
Forseti2003
Forseti2003 23.06.2021 um 18:04:25 Uhr
Goto Top
hm....früher gab es mal in diesem Forum noch wirklich Hilfe, aber scheinbar beschränkt man sich heute lieber auf Platitüden.
Forseti2003
Forseti2003 23.06.2021 um 18:05:08 Uhr
Goto Top
Danke Colinardo, das hilft mir dann schon weiter.
148656
148656 23.06.2021 aktualisiert um 18:37:04 Uhr
Goto Top
Zitat von @Forseti2003:

hm....früher gab es mal in diesem Forum noch wirklich Hilfe, aber scheinbar beschränkt man sich heute lieber auf Platitüden.

Was verstehst du unter Hilfe? Das jemand die Aufgabe erfüllt die du angenommen hast? Was passiert wenn du das Script abändern müsstest weil sich zum Beispiel deine Quelldatei geändert hat?