Jump to content

Textdatei zeilenweise zerlegen


Direkt zur Lösung Gelöst von BOfH_666,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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 von Forseti2003
Link zu diesem Kommentar
  • Beste Lösung

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!  ;-):D

Link zu diesem Kommentar
vor 2 Minuten schrieb Forseti2003:

Aber nach der letzten Anpassung klappt das mit dem Skript.

Super. :thumb1:

 

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 von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...