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-Key: 328572

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

Printed on: April 26, 2024 at 14:04 o'clock

Mitglied: 132272
132272 Feb 06, 2017 updated at 08:52:58 (UTC)
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ß
Member: internet2107
internet2107 Feb 06, 2017 at 09:35:24 (UTC)
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
Mitglied: 132272
Solution 132272 Feb 06, 2017 updated at 09:47:28 (UTC)
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.
Member: internet2107
internet2107 Feb 06, 2017 at 10:08:58 (UTC)
Goto Top
Danke. Das hilft