internet2107
Goto Top

Powershell - Regex - An die Experten

Frage an die absoluten Regex-Experten.

In einem Ordner befinden sich Dateien, die eingelesen und zerlegt werden müssen.

Eine Datei sieht zum Beispiel so aus.

ORM^O01
|0080012103
|LAB

Diese Datei muss nun so zerlegt werden, dass jeweils:
1) alles hinter MSH / PID / PV1 eingelesen wird
2) das "^"-Zeichen muss als "|" ersetzt werden
3) die "~\&"-Zeichen sollen als Leerzeichen ersetzt werden
4) alles, was jeweils hinter dem "|" -Zeichen steht, gilt als wichtiger Wert

Bis hierhin schaffe ich das noch in einen Array zu laden und er speichert mir das auch.

Aber, nun das wirklich Knifflige.
Wie kann ich es erreichen, dass er mir zusätzlich die jeweilige Stelle des Wertes ausgibt?

Nehme ich nun die Datei oben und zerlege sie, kommt nach der Umwandlung zuerst das heraus:
|Bereich1|Bereich2|Bereich3|Bereich4|201612230908ORM|O01
|0080012103SC02|Bereich5
|LAB

speichert er in meinem Array:
MSH=Bereich1,Bereich2,Bereich3,Bereich4,201612230908,ORM,O01,P,2.4
PID=0080012103,SC02,Bereich5,19750501,M
PV1=LAB,00000504970000

Hierbei soll aber zusätzlich auch erscheinen, Beispiel:
Bereich1=3 Stelle
Bereich2=4 Stelle
ORM=9 Stelle
0080012103=3 Stelle
SC02=5 Stelle
LAB=3 Stelle
00000504970000=19 Stelle

Content-ID: 328572

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

Ausgedruckt am: 25.11.2024 um 09:11 Uhr

132272
132272 06.02.2017 aktualisiert um 09:52:58 Uhr
Goto Top
Was ist daran knifflig? face-smile
Splitte deine Zeile mit Split() oder dem Split Operator -Split dann hast du deine Zeile in einem Array und kannst Position und Inhalt mit einer einfachen For-Schleife ausgeben.

Bis hierhin schaffe ich das noch in einen Array zu laden und er speichert mir das auch.
Frage ist warum du uns den ganzen oberen Teil erzählst wenn du das schon selbst geschafft hast und hier nicht deine Frage ist face-smile?
Und ein simpler Split hat mit Regex eigentlich nichts zu tun.

Gruß
internet2107
internet2107 06.02.2017 um 10:35:24 Uhr
Goto Top
"Super Antwort". Wenn das so einfach wäre, würde ich wohl kaum fragen.
Wenn du ja alles so toll kannst, dann poste doch einfach einen Code dazu face-wink
132272
Lösung 132272 06.02.2017 aktualisiert um 10:47:28 Uhr
Goto Top
"Super Antwort"
Nicht wahr, find ich auch.
Wenn du ja alles so toll kannst, dann poste doch einfach einen Code dazu
Hab ich kein Problem mit wenn man mich lieb drum bittet, war ja nirgends ersichtlich das du Code haben willst und das eine Schilderung mit Denkanstoß wieder nicht reicht.

$line sollte deine Zeile beinhalten.
$array = $line.split('|')  
0..($array.count -1) | %{
    write-host "Position: $_ , Inhalt: $($array[$_])"  
}
Wie gesagt, mit Regex hat das nüscht die Bohne zu tun, Ausgabe kannst du gestalten wie du lustig bist.

Und Tschüss.
internet2107
internet2107 06.02.2017 um 11:08:58 Uhr
Goto Top
Danke. Das hilft