AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Regex geht nicht mehr?

Ein Thema von Chefx · begonnen am 30. Jul 2009 · letzter Beitrag vom 31. Jul 2009
Antwort Antwort
Seite 3 von 4     123 4      
Chefx

Registriert seit: 13. Jun 2009
Ort: Radebeul
241 Beiträge
 
Turbo Delphi für Win32
 
#21

Re: Regex geht nicht mehr?

  Alt 31. Jul 2009, 00:19
Hab mal ein Bild vom Programm gemacht
wenn man auf dem Button Oben Fehler meldung
und unten Warnung beim Erzuegen.
Angehängte Grafiken
Dateityp: bmp oberfl_che_u_debugger_326.bmp (703,2 KB, 6x aufgerufen)
ein Sprichwort für Programmierer:
"Viele wege fürn zur EXE, aber ob sie funktioniert ist die andere Frage."
schau mal bei www.xlite.de.tc vorbei
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#22

Re: Regex geht nicht mehr?

  Alt 31. Jul 2009, 00:22
Setz doch mal einen Breakpoint, steppe durch und nenne mir die Zeile und Routine, in der der Fehler auftritt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Chefx

Registriert seit: 13. Jun 2009
Ort: Radebeul
241 Beiträge
 
Turbo Delphi für Win32
 
#23

Re: Regex geht nicht mehr?

  Alt 31. Jul 2009, 00:32
ich hab mal getestet und bin auf diese Zeile gekommen:
Delphi-Quellcode:
54: code[High(code)] := SubExpressions[High(code)];
55: Breack until MatchAgain;
Sobald ich den Breackpoint dahinter setze bringt er den fehler wo ich davon ein bild gemacht hab.
ein Sprichwort für Programmierer:
"Viele wege fürn zur EXE, aber ob sie funktioniert ist die andere Frage."
schau mal bei www.xlite.de.tc vorbei
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#24

Re: Regex geht nicht mehr?

  Alt 31. Jul 2009, 00:39
Da ich die Klasse nicht kenne: kann sich SubExpressionCount innerhalb der Schleife ändern? Wenn nicht, setz das SetLength() mal vor die Schleife.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Chefx

Registriert seit: 13. Jun 2009
Ort: Radebeul
241 Beiträge
 
Turbo Delphi für Win32
 
#25

Re: Regex geht nicht mehr?

  Alt 31. Jul 2009, 00:44
Ne das geht nicht weil ja SubExpressions Die "suchergebnisse" hat und das ist in einem Array gespeichter und ich will Die Daten in ein anderes Array Übertragen.
Hab das trotzdem gemacht funktioniert nicht.
ein Sprichwort für Programmierer:
"Viele wege fürn zur EXE, aber ob sie funktioniert ist die andere Frage."
schau mal bei www.xlite.de.tc vorbei
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#26

Re: Regex geht nicht mehr?

  Alt 31. Jul 2009, 00:44
Da denke ich später nochmal drüber nach, ich muss jetzt in Bett.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Chefx

Registriert seit: 13. Jun 2009
Ort: Radebeul
241 Beiträge
 
Turbo Delphi für Win32
 
#27

Re: Regex geht nicht mehr?

  Alt 31. Jul 2009, 00:46
ich auch tschau!
ein Sprichwort für Programmierer:
"Viele wege fürn zur EXE, aber ob sie funktioniert ist die andere Frage."
schau mal bei www.xlite.de.tc vorbei
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#28

Re: Regex geht nicht mehr?

  Alt 31. Jul 2009, 06:08
Guten Morgen,

Zitat von Chefx:

Delphi-Quellcode:

//A fehlerquelle meinermeinung nach
     if Match then
        begin
            repeat
              setlength(code,SubExpressionCount);
              code[High(code)] := SubExpressions[High(code)];
            until MatchAgain;
            result := verarbeitung(code,pos);
            end;
//B Ende
Ohne es selbst getestet zu haben: das Ganze schaut mir ziemlich suspekt aus:
  • Welchen Wert hat SubExpressionCount im Debugger!
  • was soll code[High(code)] := SubExpressions[High(code)]; eigentlich tun? Entweder ist SubExpressionsCount für jeden Treffer der RegExp neu definiert, dann überschreibst Du Dir aber ständig die Daten. Oder es wird durch das MatchAgain nicht verändert, dann schreibst Du aber immer nur Daten in den letzten Datansatz rein.
  • Was auch immer Du mit dem Pos-Array vor hast: Momentan ist es nicht initialisert!
  • Ist nun eine reine Vermutung, aber kann es sein, daß Du das hier haben willst:
    Delphi-Quellcode:
    SetLength(code, 0); //Array initialisieren
    with TPerlRegEx.Create(nil) do
    ...
    if Match then
      begin
        repeat
          nOldIndex := Length(code); // nOldIndex als integer deklarieren
          setlength(code, nOldIndex + SubExpressionCount); // Treffer um neu gefundene erweitern
          for n := 0 to SubExpressionCount - 1 do
            code[nOldIndex + n] := SubExpressions[n]; // Neue Treffer in das code Array eintragen
        until not MatchAgain; // und weitersuchen. Abbruch, wenn kein Treffer mehr

        result := verarbeitung(code,pos); // jetzt ALLE Treffer verarbeiten
      end;
    So würde zumindest für mich der Aufbau einer Trefferliste Sinn machen.

Grüße,
Uli
  Mit Zitat antworten Zitat
Chefx

Registriert seit: 13. Jun 2009
Ort: Radebeul
241 Beiträge
 
Turbo Delphi für Win32
 
#29

Re: Regex geht nicht mehr?

  Alt 31. Jul 2009, 16:12
Delphi-Quellcode:
SetLength(code, 0); //Array initialisieren
with TPerlRegEx.Create(nil) do
...
if Match then
  begin
    repeat
      nOldIndex := Length(code);
      setlength(code, nOldIndex + SubExpressionCount); // warum dann noch + SubExpressionCount
      for n := 0 to SubExpressionCount - 1 do
        code[nOldIndex + n] := SubExpressions[n]; // warum nicht nur n?
    until not MatchAgain; // heist das nicht so viel wie nächster treffer

    result := verarbeitung(code,pos);
  end;
Also würde ich das so Copy/Paste machen dann funktionriet es auch nicht!

Positiv: Es kommt keine Fehlernmeldung
Negativ: Es gib kein Ergebniss!

Also hier mal ein Script das ich unter C# geschrieben hab:
Code:
private void ... ;
{
   MatchCollection mc;
   Match m;
   int[] count = new int[20];
   int[] position = new int[20];

   Regex r = new Regex("{(?<contents>[^}]*)}");
   mc = r.Matches("{Text1} und {Text2}");
      //Suchergebnisse in das vorgegebene Array Speichern
   for (int i = 0; i < mc.Count; i++)
   {
      count[i] = mc[i].Length;
      position[i] = mc[i].Index;
   }
   //auslesen der Arrays
   for (int i = 0; i < mc.Count; i++)
   {
      richTextBox1.Text += "Gefundene Position:" + position[i] + "\n";
      richTextBox1.Text += "Länge vom String:" + count[i] + "\n";
   }
}
Das blöde ist dass das nicht genauso ist wie in Delphi geht!
Die MatchCollection (ist bestimmt mit in der Subexpressions eingebaut ) ist sehr hilfreich und der ganze aufbau halt!
Aber so funktioiert das ja nicht in delphi!
Angehängte Dateien
Dateityp: zip regex_projekt_218.zip (513,9 KB, 2x aufgerufen)
ein Sprichwort für Programmierer:
"Viele wege fürn zur EXE, aber ob sie funktioniert ist die andere Frage."
schau mal bei www.xlite.de.tc vorbei
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#30

Re: Regex geht nicht mehr?

  Alt 31. Jul 2009, 17:11
Ich denke mal, wenn Du eine for-Schleife nehmen würdest, bekämst Du auch ein Ergebnis.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz