Autor Beitrag
t3Qn0lo-G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68

Win 7
Delphi 7 Enterprise
BeitragVerfasst: Do 12.10.06 18:48 
Hallo Leute,
ich suche eine Möglichkeit, um ein Textdokument auf bestimmte "Zeichenschemas" zu durchsuchen.

Einbinden möchte ich das in ein Programm, welches mir den Quelltext einer Seite herunterläd, diesen dann analysiert.

Ich habe mir das folgendermaßen vorgestellt:

Es gibt in dem Quelltext mehrere Links:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
<a href="http://www.seite.de/datei.php?nummer=1337&seite=3">Seitenlink</a>
blablabla
blablabla
blablabla
<a href="http://www.seite.de/datei.php?nummer=13371&seite=3">Seitenlink2</a>
blablablablablablablabla
blablablabla
blablablabla
<a href="http://www.seite.de/datei.php?nummer=133713&seite=3">Seitenlink3</a>


Mit dem Programm bzw. der Prozedur möchte ich dann diesen Quelltext untersuchen und alle "Nummern" sammeln und meinetwegen in einer Listbox speichern. Bei PHP heißt das irgendwas mit regulären Ausdrücken (reg_exp oder so), wie man soetwas mit Delphi realisiert... keine Ahnung!

Vielleicht kann mir das einer von den Pros oder wie auch immer erklären, bzw. mir einen Hint geben, wonach ich suchen muss.

// edit
Habe eben in www.delphi-forum.de/...gul%E4re+ausdr%FCcke dem Thread was gefunden, allerdings hilft mir das nur bedingt weiter, da ich diese regulären Ausdrücke nicht selber "bauen" kann... die TRegExp finde ich bei Torry ebenfalls nicht :)

Mit freundlichem Gruß,
Sascha
Calculon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: Fr 13.10.06 23:21 
Also, du kannst folgendermaßen vorgehen:

Du definierst eine Stringvariable, eine Char-Variable und eine Integer-Prüfvariable (z.B. str, ch und int).
Anschließend baust du eine äußere Schleife, die die Zeilen deiner Textdatei durchläuft:

ausblenden Delphi-Quelltext
1:
while not Eof(myTextfile) do					


Pro Iterationsschritt schreibst du die Zeile in deinen string:

ausblenden Delphi-Quelltext
1:
ReadLn(myTextfile,str);					


Nun eine innere Schleife, die bis zum letzten Zeichen der Zeile die einzelnen Character in die Variable ch hineinschreibt und dabei überprüft, ob es sich um eine Ziffer handelt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  repeat
     str := trim(str); // entfernt die Leerzeichen am Anfang u. am Ende
     ch := copy(str,1,1);
     delete(str,1,1);
        try
          int := strtoint(ch);
          // int kann nun in ein array of integer oder eine TStringlist
          // hineingeschrieben werden!
        except
          break;
        end;
     until ch = #13 // weiß nicht, ob das so geht (#13 entspricht glaube ich dem
                    // Return-Zeichen)


Ich habe noch nicht viel mit Character-Variablen gearbeitet, aber ich glaube so ungefähr könnte es funktionieren.

Gruß
zongo-joe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 134

win xp prof
D3, D4, D7
BeitragVerfasst: Sa 14.10.06 15:35 
also wenn du alles suchst, was nach "nummer=" steht, dann lade das ganze wie von calculon beschrieben ein und suche zb mit
x=pos('nummer=',str) (oder umgekehrte Reihenfolge der parameter, weiss ich nicht mehr auswendig)

und wenn x>0 dann liest du alle numerischen zeichen danach ein:

ausblenden Delphi-Quelltext
1:
2:
3:
inc(n);
helpchar:=str[x+7+n];      // 7=länge von "nummer="
if ord(helpchar) in [ord('1')..ord('0')] then zahl = zahl + helpchar;

dann abschneiden:

ausblenden Delphi-Quelltext
1:
str:=copy(str, n-1, length(str)-n+1);					


und wieder bei x=pos anfangen

wenn dir das nicht reicht, dann such mal nach begriffen wie PARSEN o.s.ä.

EDIT:
besser wäre natürlich noch so was wie:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
while ord(helpchar) in [ord('1')..ord('0')] do begin
  zahl = zahl + helpchar;
  inc(n);
  helpchar:=str[x+7+n]; 
end;


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt