Forseti2003 14 Geschrieben 9. Januar 2020 Melden Teilen Geschrieben 9. Januar 2020 (bearbeitet) Hallo in die Runde, ich hab da mal eine Frage zu einem Skript, vorab das Szenario: Ich erhalte mehrere Textdateien, darin sind mehrere Datensätze die ich über zwei Werte eindeutig zu ordnen kann. Eines ist die Auftragsnummer ($ANR) das andere eine Art Satzbezeichnung ($STZ). Nun würde ich einfach gerne die jeweilige Input-Datei zeilenweise auslesen und dann in eine neue Datei ausgeben. Die neue Datei soll dabei die Auftragsnummer beinhalten und einen Zähler. Nehmen wir ein Beispiel: 0200 A510158 Hauptsatz1 0300 A510158 Nebensatz1 0300 A510158 Nebensatz2 und so weiter - in der Datei kann es auch vorkommen, das die selbe Auftragsnummer mit der selben Satzart mehrfach vorhanden ist. Daher ist es wichtig, das alle 0200 eine eigene Ausgabedatei bekommen und die Nebensätze der richtigen Datei zugeordnet werden. Folgendes Skript habe ich dazu bisher entwickelt: clear-host # Deklaration Variablen $Eingang = "e:\powershell\Eingang\" $Ausgang = "e:\Powershell\Ausgang\" $datei = gci $Eingang foreach ($a in $datei){ get-content $a.FullName | foreach-object {$_ # Variablen $STZ = $_.Substring(0,4) $ANR = $_.Substring(9,12) $i = 1 $ausgabefile = $ANR +'_'+ $i + '.txt' if ($STZ -eq '0200') { do { if (Test-Path $ausgang$ausgabefile) { $i = $i +1 $ausgabefile = $ANR +'_'+ $i + '.txt' $ausgabe = $ausgabefile } else {$_ | out-file -filepath $ausgang$ausgabefile -append } } while ( Test-Path $ausgang$ausgabefile) $_ | out-file -filepath $ausgang$ausgabefile -append } else {$_ | out-file -filepath $ausgang$ausgabe -append} } } Leider ist das Ergebnis nicht 100% das was ich gerne hätte. Mit einer Testdatei im Eingang erhalte ich dann einen Ausgang: A510158_1.txt A510158_2.txt A510158_3.txt Wobei in der Datei 1 nur 1x die Zeile 0200 enthalten ist, die restlichen zwei Dateien dagegen sind korrekt. Ich weiss also nicht, warum er die Datei 1 überhaupt so erzeugt und wieso er dann im späteren Verlauf die Dateien richtig aufbaut. Hat jemand eine Idee, was ich dabei übersehe? Gruß Forseti -Update: Hat sich gerade erledigt, hab den Fehler gefunden - den Zähler auf 0 gesetzt und die Variable $i und $ausgabefile vor das DO gesetzt, jetzt macht er das was ich will. bearbeitet 9. Januar 2020 von Forseti2003 Zitieren Link zu diesem Kommentar
Beste Lösung BOfH_666 577 Geschrieben 9. Januar 2020 Beste Lösung Melden Teilen Geschrieben 9. Januar 2020 Ich habe Deine Logik nicht ganz verstanden, aber hier einfach ein paar generelle Hinweise. Wenn Deine Daten quasi CSV-Daten sind, machst Du Dir das Leben einfacher, wenn Du sie auch so behandelst. $SourceData = @' 0200 A510158 Hauptsatz1 0300 A510158 Nebensatz1 0300 A510158 Nebensatz2 '@ | ConvertFrom-Csv -Header STZ,Index,Auftrag -Delimiter ' ' $SourceData $SourceData | Group-Object -Property STZ $SourceData | Group-Object -Property Auftrag Ich hab jetzt einfach mal das Leerzeichen als Trenner angenommen. Wenn die Daten als "Tabelle" vorliegen, dann hast Du mit Powershell vielfältige Möglichkeiten mit den Daten zu "jonglieren". Hier oben z.B. hab ich die Daten einfach mal nach verschiedenen Attributen gruppiert ... Fragen? Fragen! 1 Zitieren Link zu diesem Kommentar
Forseti2003 14 Geschrieben 9. Januar 2020 Autor Melden Teilen Geschrieben 9. Januar 2020 Die Daten kommen als reine TXT mit Festbreite. Aber nach der letzten Anpassung klappt das mit dem Skript. Wie kann ich eigentlich den Thread als gelöst markieren? Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 9. Januar 2020 Melden Teilen Geschrieben 9. Januar 2020 (bearbeitet) vor 2 Minuten schrieb Forseti2003: Aber nach der letzten Anpassung klappt das mit dem Skript. Super. vor 2 Minuten schrieb Forseti2003: Wie kann ich eigentlich den Thread als gelöst markieren? Das weiß ich tatsächlich nicht, ich hatte hier noch nie eine Frage gestellt und konnte noch nie eine Antwort entsprechend markieren. Aber ich vermute es dürfte nciht zu versteckt sein ... such ma. bearbeitet 9. Januar 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
Nobbyaushb 1.475 Geschrieben 9. Januar 2020 Melden Teilen Geschrieben 9. Januar 2020 (bearbeitet) vor 18 Minuten schrieb Forseti2003: Wie kann ich eigentlich den Thread als gelöst markieren? Bei einem Thread, den du selber eröffnet hast, ist ein Feld mit Haken links neben den Namen / Beiträgen, so kannst du den Hilfreichsten markieren bearbeitet 9. Januar 2020 von Nobbyaushb Zitieren Link zu diesem Kommentar
daabm 1.366 Geschrieben 9. Januar 2020 Melden Teilen Geschrieben 9. Januar 2020 vor 8 Stunden schrieb BOfH_666: Das weiß ich tatsächlich nicht, ich hatte hier noch nie eine Frage gestellt und konnte noch nie eine Antwort entsprechend markieren. Frag doch mal was, dann antworte ich Dir und Du kannst selbst forschen Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 10. Januar 2020 Melden Teilen Geschrieben 10. Januar 2020 vor 4 Stunden schrieb daabm: Frag doch mal was, dann antworte ich Dir und Du kannst selbst forschen Du bist immer so fürsorglich/mütterlich zu mir. Danke. Aber das ist mir tatsächlich nicht soo wichtig ... und ich weiß es ja jetzt dank Nobby auch. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.