vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
RegEx 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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: RegEx mit Gruppen mit gleichem Namen 
Autor: ModeratorDaveS (Moderator)
Datum: 13.10.11 19:26

    Dim rx As New Regex("\^(?<Barcode>[0-9....\^)+)")    
    Dim res As Match = rx.Match(line)
    Dim g1 As Group = res.Groups("Document")
    For Each c As Capture In g1.Captures
        Debug.WriteLine(c.Value)
    Next

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: RegEx mit Gruppen mit gleichem Namen 
Autor: ModeratorDaveS (Moderator)
Datum: 18.10.11 12:57

Die Forumsoftware hat keine Methode einen Thread als erledigt zu kennzeichnen.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Thema gelöst 
Autor: ModeratorDaveS (Moderator)
Datum: 18.10.11 13:17

Das ist sehr nett, ein einfaches Dankeschön an alle Beteiligten wird hier meistens als völlig ausreichend betrachtet

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel