tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Spyke
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
615
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von hauke1981
    hauke1981 hauke1981 ist offline Mitglied Gold
    Registriert seit
    Mar 2007
    Beiträge
    159
    Hi,
    da bin ich mal wieder mit einer Frage. Ich suche mit folgendem Code nach Regex in einem Array.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    List<string> testen = new List<string>();
                string start = @"GetValueForID";
                string end = ")";
                Regex expressionStart = new Regex(start);
                try
                {
                    foreach (string element in strArray)
                    {
                        if (expressionStart.IsMatch(element))
                        {
                            int startindex = element.IndexOf(start) + start.Length + 2;
                            int endindex = element.IndexOf(end, startindex) - 1;
     
                            string id = element.Substring(startindex, endindex - startindex);
                            //string whitespace = element.Trim();
                            testen.Add(id);
                            //testen.Add(whitespace);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString(),"Failure");
                }

    Jetzt hab ich aber das Problem, dass mein Programm immer stehen bleibt wenn es in einer Datei auf einen Zeilenumbruch stößt, ich meine damit, dass es zwar den Regex findet, aber nach diesem ein zeilenumbruch in der datei ist und mein Programm daher nichts findet da das was rausgefiltert werden soll in einer neuen Zeile ist.
    Wie krieg ich es hin, dass nicht nur in einer Zeile sondern in mehreren Zeilen, mind. 2 Zeilen gelesen wird.

    Hoffe einer kann mir helfen. Grüße
     

  2. #2
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    du musst als RegexOptions Singleline angeben, dann wird alles sozusagen als ein string ausgewertet (genaueres kann dir msdn sagen).

    Wobei ich aber bei dir keinen Sinn für Regex sehe.
    Beim Typ string gibt es die Methode Contains, prüf doch direkt damit ab.
    Sollte sogar auch performanter sein.

    Oder vielleicht sogar noch besser direkt mit IndexOf prüfen
    (dort kannst du auch angeben ob Groß- und Kleinschreibung beachtet werden soll).

    Müsstest es also nur wie folgt umbauen:
    Code :
    1
    2
    3
    4
    5
    6
    
    int startindex = element.IndexOf(start, StringComparison.CurrentCultureIgnoreCase);
    if(startindex >=0)
    {
      startindex += start.Length + 2;
      ...
    }
    (In meinem Beispiel wird jetzt Groß- und Kleinschreibung nicht beachtet)
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  3. #3
    Avatar von hauke1981
    hauke1981 hauke1981 ist offline Mitglied Gold
    Registriert seit
    Mar 2007
    Beiträge
    159
    Hi,
    habs ausprobiert komme aber immer wieder auf den gleichen Fehler.

    Kann ich das Problem lösen, wenn ich zum Beispiel die Leerzeichen und Zeilenumbrüche in meinem String lösche? wenn ja sollte das doch dann mit replace(zeilenumbrüche, "") gehen oder
     

  4. #4
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Meinst mit gleichen Fehler das das Programm stehen bleibt?

    Ist das oben der original Quelltext?
    Den aus dem Code wird mir nicht ersichtlich warum das Programm stehen bleiben sollte.

    Was verstehst du unter stehen bleiben?

    Wenn das Programm steht bleibt, drück mal Pause in der IDE und schau mal nach wo der debugger gerade ist. Geh dann Schritt für Schritt mit dem debugger weiter.

    Edit:
    Glaube nicht das es an den Zeilenumbrüchen liegt.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  5. #5
    Avatar von hauke1981
    hauke1981 hauke1981 ist offline Mitglied Gold
    Registriert seit
    Mar 2007
    Beiträge
    159
    Mit stehenbleiben meine ich folgenden Fehler:

    Code :
    1
    2
    3
    
    "Eine Ausnahme (erste Chance) des Typs "System.ArgumentOutOfRangeException" ist in mscorlib.dll aufgetreten.
     
    Zusätzliche Informationen: Der Index lag außerhalb des Bereichs. Er muss nicht negativ und kleiner als die Auflistung sein."

    Der Quelltext oben ist ein Auszug aus dem Originalquelltext, denke auch nicht das es an diesem liegt, sondern eher daran, dass ich immer bei Leerzeichen im string auf die oben aufgeführte Exception stoße.

    An was denkst du liegt es dann
     

  6. #6
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    nein
    die Fehlermeldung besagt ungefähr so viel als das du versucht auf eine Indexposition zu zugreifen die garnicht existiert. (Sehe grad steht ja auch drunter )

    Am besten du setzt mal im catch einen Breakpoint und schaust dir den Stacktrace der Exception an, dort sollte dir aufgezeigt werden in welcher Zeile der Fehler auftritt.

    Ich vermute mal der Fehler liegt am Substring das die Länge für den zu ermitteltenden Text (endindex - startindex) + StartIndex über die Länge von element hinaus geht.

    Edit:
    Oder es kracht schon bei der ermittlung von endIndex,
    hauke1981 bedankt sich. 
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  7. #7
    Avatar von hauke1981
    hauke1981 hauke1981 ist offline Mitglied Gold
    Registriert seit
    Mar 2007
    Beiträge
    159
    Alles klar werde ich mal machen,

    ach übrigends du hast recht das genau an der Stelle bei Substring die Exception auftritt.

    Wie kann ich den einen String nach einem Regex absuchen? Mit foreach geht das ja dann nicht oder? (Nur als hoffentlich kleine Frage am Rande )
     

  8. #8
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Zitat Zitat von hauke1981 Beitrag anzeigen
    Wie kann ich den einen String nach einem Regex absuchen? Mit foreach geht das ja dann nicht oder? (Nur als hoffentlich kleine Frage am Rande )
    Du siehst ja er springt rein also ist alles ok beim Regex.
    Das problem ist du willst mehr abschneiden als der string dir zulässt.

    Ich vermute mal es liegt höchst wahrscheinlich am startIndex+2, das du dir da zu viel Zeichen rausnimmst.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

Ähnliche Themen

  1. string mit regex match auslesen
    Von cuban im Forum PHP
    Antworten: 10
    Letzter Beitrag: 09.10.07, 14:23
  2. Ankerpunkte mittels Regex auslesen
    Von U-Wasser-Gehaeuse im Forum PHP
    Antworten: 5
    Letzter Beitrag: 12.03.07, 20:09
  3. Substring per Regex auslesen
    Von wSam im Forum Java
    Antworten: 7
    Letzter Beitrag: 08.08.06, 20:02
  4. Probleme mit dem Regex
    Von Unicate im Forum PHP
    Antworten: 5
    Letzter Beitrag: 26.02.06, 19:38
  5. [REGEX] 2 Objecte in Pattern auslesen.
    Von DelphiDell im Forum PHP
    Antworten: 2
    Letzter Beitrag: 24.12.05, 15:31