AGB  ·  Datenschutz  ·  Impressum  







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

Schleifen und Suchroutinen

Ein Thema von k-- · begonnen am 24. Jul 2007 · letzter Beitrag vom 24. Jul 2007
Antwort Antwort
k--

Registriert seit: 24. Feb 2007
Ort: Berlin
9 Beiträge
 
Delphi 7 Professional
 
#1

Schleifen und Suchroutinen

  Alt 24. Jul 2007, 15:46
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:
<a href="names.php?action=post&name=
und
Code:
&"><img src="images/pn.gif
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. ;(


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
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Schleifen und Suchroutinen

  Alt 24. Jul 2007, 16:22
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Schleifen und Suchroutinen

  Alt 24. Jul 2007, 16:32
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);
Dominik
  Mit Zitat antworten Zitat
k--

Registriert seit: 24. Feb 2007
Ort: Berlin
9 Beiträge
 
Delphi 7 Professional
 
#4

Re: Schleifen und Suchroutinen

  Alt 24. Jul 2007, 17:35
Ersteinmal vielen Dank.

Ich versuchte es mit der Variante von dominikkv. Allerdings gibt Delphi eine Fehlermeldung aus, welche besagt, das in der Zeile
a := PosEx(s2, myString, p) - p; 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.


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.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Schleifen und Suchroutinen

  Alt 24. Jul 2007, 18:59
Welcher Teil denn? Werden denn von Posex die richtigen zahlen geliefert? werden sie richtig kopiert?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Schleifen und Suchroutinen

  Alt 24. Jul 2007, 19:05
Zitat von k--:
Allerdings gibt Delphi eine Fehlermeldung aus, welche besagt, das in der Zeile ... vorzeichenbehaftete und -lose Typen kombiniert werden.
Das ist ja kein Fehler (sonst würde die EXE nicht starten), sondern eine Warnung.Es kann sein, das hier Murks passiert (wenn man positive und negative Zahlen kombiniert).
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
k--

Registriert seit: 24. Feb 2007
Ort: Berlin
9 Beiträge
 
Delphi 7 Professional
 
#7

Re: Schleifen und Suchroutinen

  Alt 24. Jul 2007, 19:06
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:
et" type="text/css" href="http://aggressi9n.de/testserver/css/style3.css" />
      <title>Testsite</t
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:30 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