![]() |
Schleifen und Suchroutinen
Hallo, werte DPler,
ich habe das Problem, welches die Kommentare im angehangen Quellcode schon andeuten: Ich benötige eine Routine, die in einem RichEdit, welche den Quellcode einer HTM-Datei geladen hat, nach allen Textstrings absucht, welche zwischen
Code:
und
<a href="names.php?action=post&name=
Code:
liegen. Pro Datei werden genau 100 Namen enthalten sein. Die gefundenen Namen sollen dann in einem Array, eine TSringList oder etwas ähnlichem gespeichert werden, so das ich anschließend auf diese zugreifen kann. Allerdings, habe ich noch nie eine Suchroutine erstellt und per Suche bin ich zwar auf Routinen gestoßen, dessen Verlauf ich aber nicht nachvollziehen und damit nicht anpassen konnte. ;(
&"><img src="images/pn.gif
Delphi-Quellcode:
var a2, ausw, get, s: Integer;
// [...] // a2 ist die Anzahl der Dateien, welche zuvor heruntergeladen wurden for ausw := 1 to a2 do begin // rGetNames (TRichEdit) lädt nacheinander alle Dateien // Die Dateien befinden sich im Unterordner /query/ und heißen get*00.htm rGetNames.Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'query\get' + FloatToStr(s) + '00.htm'); // Schleife zum Auslesen der Namen for get := 1 to 100 do begin // Hier müsste die Suchschleife stehen, die alle 100 Namen pro .htm // ausliest und sie in einem Array oder einer TStringlist etc. // speichert, um sie anschließend in einer Ini (oder Textdokument) // zu verwahren: // Gesucht wird der Inhalt, der zwischen // "<a href="names.php?action=post&name=" und "&"><img src="images/pn.gif" // zu finden ist (100 Namen pro Datei) end; end; Wo die Namen anschließend gespeichert werden, ist unwichtig, wichtig ist nur, dass ich auch nach einem Neustart der Applikation sie wieder benutzen kann. MfG |
Re: Schleifen und Suchroutinen
Was du brauchst ist pos und PosEx. Damit kannst du einen Teilstring in deinem langen text suchen.
Du suchst also nach dem string der vor den Namen steht und merkst dir die Position vom ersten Zeichen des namens. Dann suchst du dahinter das nächste auftreten des Strings, der den Namen beendet und kopierst den Namen per Copy dorthin, wo du ihn haben willst. Zum Speichern wird die Stringliste am besten sein, da sie schon die Befehle zum speichern und laden mitbringt. |
Re: Schleifen und Suchroutinen
das hab ich grad ohne delphi freihend zusammengeschrieben...
musst schauen, vllt wird eine stelle zuviel oder zuwenig kopiert...
Delphi-Quellcode:
var Namen : TStringList;
i, a : Byte; p : Cardinal; s1, s2 : String; // ... namen := TStringList.create; p := 0; s1 := '<a href="names.php?action=post&name='; s2 := '&"><img src="images/pn.gif'; for i := 1 to 100 do begin p := PosEx(s1, myString, p) + length(s1); a := PosEx(s2, myString, p) - p; namen.add(copy(myString, p, a)); end; namen.SaveToFile('C:\Test.txt'); FreeAndNil(Namen); |
Re: Schleifen und Suchroutinen
Ersteinmal vielen Dank.
Ich versuchte es mit der Variante von dominikkv. Allerdings gibt Delphi eine Fehlermeldung aus, welche besagt, das in der Zeile
Delphi-Quellcode:
Vorzeichenbehaftete und -lose Typen kombiniert werden. Nichtsdestotrotz startete es und auch die C:\Test.txt wurde erstellt, inder aber nur 101 Zeilen leere zu finden sind.
a := PosEx(s2, myString, p) - p;
Nachtrag: OK, dieses Problem habe ich selbst gelöst bekommen. Ein weiteres ist, dass in der TXT immer nur die letzten 100 Namen und ein immer gleichbleibender Teil der HTM gespeichert wird. |
Re: Schleifen und Suchroutinen
Welcher Teil denn? Werden denn von Posex die richtigen zahlen geliefert? werden sie richtig kopiert?
|
Re: Schleifen und Suchroutinen
Zitat:
|
Re: Schleifen und Suchroutinen
Also Beispielsweise rufe ich die ersten 300 Namen ab, macht 3x 100 Namen pro HTM.
In der Txt sieht es dann so aus:
Code:
Name 1
Name 2 [...] Name 99 Name 100 et" type="text/css" href="http://aggressi9n.de/testserver/css/style3.css" /> <title>Testsite</t Name 1 Name 2 [...] Name 99 Name 100 et" type="text/css" href="http://aggressi9n.de/testserver/css/style3.css" /> <title>Testsite</t Name 1 Name 2 [...] Name 97 Name 98 Edit: Ersteres Problem konnt ich lösen, nun bleibt noch die Frage, wo die
Code:
herkommen. Wohlgemerkt, befinden diese sich schon in der dritten Zeile jeder HTM (Die Namen sind viel später erst zu finden). Weder kurz vorher noch kurz nach dieser Stelle ist einer der gesuchten Strings zu finden.
et" type="text/css" href="http://aggressi9n.de/testserver/css/style3.css" />
<title>Testsite</t |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz