| |
VB.NET - FortgeschritteneRegEx mit Gruppen mit gleichem Namen | | | Autor: motom001 | Datum: 05.10.11 15:06 |
| Hallo,
ich habe folgende Datei:
@IMPHDR,^^,1001,1002,1003,1004,2001,2002,2003
^9100017010^,^1000^,^05.10.11^,^Platz1^,^00000005.tif^,^00000006.tif^,^00000007_
.tif^
@IMPHDR,^^,1001,1002,1003,1004,2001
^0000000000^,^1000^,^05.10.11^,^Platz1^,^00000008.tif^
@IMPHDR,^^,1001,1002,1003,1004,2001
^9100017011^,^1000^,^05.10.11^,^Platz1^,^00000009.tif^
@IMPHDR,^^,1001,1002,1003,1004,2001,2002
^0000000000^,^1000^,^05.10.11^,^Platz1^,^00000010.tif^,^00000011.tif^ Diese Datei möchte ich mittels RegEx wie folgt zerlegen (Beispiel 1. Zeile):
Barcode: 9100017010
Nummer: 1000
Datum: 05.10.11
Platz: Platz1
Dokumente:
-- Dokument1: 00000005.tif
-- Dokument2: 00000006.tif
-- Dokument3: 00000007.tif
Die ersten Indexbegriffe sind immer vorhanden, aber die Anzahl der Dokumente kann zwischen 1-x liegen. Ich habe dazu folgenden RegEx:
\^(?<Barcode>[0-9]{10})\^,\^(?<Nummer>[0-9]*)\^,\^(?<Datum>[0-9]{2}.[0-9]{2}.[0-9]{2})\^,\^(?<Platz>[a-zA-Z0-9_-]*)\^(?<Documents>(,\^(?<Document>[a-zA-Z0-9]+.tif)\^)+)
speziell geht es um den Part:
(?<Documents>(,\^(?<Document>[a-zA-Z0-9]+.tif)\^)+) Nun hab ich aber in der Gruppe "Document" immer nur das letzte Dokument (und nicht die vorhergehenden).
Wenn möglich möchte ich ein Array namens "Documents" in dem alle "Document" drin enthalten sind.
'RegMatch ist die Variable die den RegEx.Match enthält
For each Document in RegMatch.Groups.Item("Documents")
'do something
next Kann mir jemand dabei helfen? Ist es überhaupt möglich so etwas abzufragen oder muss ich 2 RegEx einsetzen um das zu schaffen (und beim 2. RegEx für jeden Match eines Dokumentes)?
Beitrag wurde zuletzt am 05.10.11 um 15:08:12 editiert. | |
Re: RegEx mit Gruppen mit gleichem Namen | | | Autor: motom001 | Datum: 07.10.11 09:59 |
| Mhhh, weiß keiner ne Antwort oder vielleicht einen Tipp wo ich weiter suchen kann?
Vielleicht ist es auch einfach nicht möglich und ich kann mir meine Suche sparen... | |
Re: RegEx mit Gruppen mit gleichem Namen | | | Autor: Vento | Datum: 12.10.11 20:31 |
| Bestimmt sehe ich die Sache zu einfach, aber warum durchsuchst du die Datei nicht mit einem Streamreader. Dann kannst du die Ergebnisse in einem Array speichern und anschließend entsprechend ausgeben bzw. in einem anderen Dokument speichern.
Wenn du es mit RegEx machst dann kannst du eine MatchCollection benutzen. Darin werden alle passenden Übereinstimmungen gespeichert und du kannst sie einzeln auslesen.
Beitrag wurde zuletzt am 12.10.11 um 20:55:04 editiert. | |
Re: RegEx mit Gruppen mit gleichem Namen | | | Autor: motom001 | Datum: 13.10.11 11:41 |
| Hallo,
danke für Deine Antwort.
Ich lese bereits jetzt die Textdatei zeilenweise aus.
Jede Zeile prüfe ich, ob der RegEx übereinstimmt.
Wenn der RegEx übereinstimmt, dann soll er alle Gruppen aus dieser Zeile extrahieren.
Die Gruppe "Document" ist aber immer mit dem letzten Dokument der Zeile gefüllt und nicht, wie ich gehofft habe mit einem Array oä das alle Dokumente enthält.
Da ich nur einen RegEx für die gesamte Zeile nutzen wollte, kann ich auch nicht mit MatchCollection arbeiten.
Ich müsste also 2 RegEx erstellen:
- der erste für die Indexbegriffe
- der zweite für die sich wiederholenden Dokumente
Meine Ursprungsfrage war, kann ich es doch mit einem RegEx lösen? | |
Re: RegEx mit Gruppen mit gleichem Namen | | | Autor: Vento | Datum: 13.10.11 18:34 |
| Ich kenne nicht die Größe deiner Datei aber hast du es mal mit einem Streamreader versucht.
Bei dem sehr strukturiertem Aufbau der oben zu sehen ist kannst du doch eindeutige Zeichenketten wie "@IMPHDR,^^," suchen und dann im Prinzip nach dem Zeilenumbruch+"^" beginnen die Werte stur auszulesen, wobei "^,^" als Trenner dient. Sobald du wieder auf "@IMPHDR,^^," stößt fängst du den nächsten Datensatz an.
Ansonsten kannst du anhand der letzten vier Zahlen in der Zeile auch vorher erkennen wieviele Dokumente es gibt und entsprechend darauf reagieren. | |
Re: RegEx mit Gruppen mit gleichem Namen | | | Autor: motom001 | Datum: 18.10.11 12:01 |
| Sorry, dass ich mich jetzt erst melde...
Dein Hinweis war genau das was ich gesucht habe! Danke!!!!!
PS: Kann ich das Thema irgendwie als erledigt kennzeichnen?
Beitrag wurde zuletzt am 18.10.11 um 12:02:11 editiert. | |
Thema gelöst -> gesuchte Lösung kam von DaveS | | | Autor: motom001 | Datum: 18.10.11 13:05 |
| Ok - dann Danke ich einfach nochmal recht herzlich für die Antwort, die mich genau zu dem Ziel gebracht hat, was ich wollte. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|