Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Posex und kein Plan :-( (https://www.delphipraxis.net/43503-posex-und-kein-plan.html)

jolomino 5. Apr 2005 01:08


Posex und kein Plan :-(
 
hallo,
ich habe einen html-code, wo ich eine bestimmte zeile heraus ziehen möchte. habe das forum schon durchsucht und bin auf posex gestossen. doch leider bekomme ich es nicht hin, den code zu parsen.
wäre echt nett, wenn mir der ein oder andere etwas helfen könnte.

also ein auschnitt aus dem html-code sieht so aus:

Code:
<input type=checkbox name=".docs" value="klausi pac.text">
 
                    [img]http://myurl.de/i/dd/for.gif[/img]
              </td>
  <td align=left valign=middle>
  <font face="Arial,Helvetica" size=-1>

                  <a href="http://myurl.de/dd/33fd3dff/dd/klausi+pac.text?DUcKdUCBBkzOTnEq">
also alles was einmalig ist, ist <input type=checkbox name=".docs" value="

klausi pac.text ist das einzige was mir bekannt ist.
dieser html-code wiederholt sich 3-4mal, wobei der aufbau immer gleich ist, nur steht das nächste mal nicht klausi pac.text sonder z.b. petra pac.text.
ich brauch nun aber die url, die etwas tiefer steht, damit ich diese downloaden kann. wie in diesem fall von klausi pac.text.
http://myurl.de/dd/33fd3dff/dd/klausi+pac.text?DUcKdUCBBkzOTnEq

wenn ich diese dann downgeloadet habe, würde ich den gleichen schritt halt nochmal durchlaufen lassen, um evtl. petra pac.text zu schnappen.
kann mir da mal einer anhand eines beispieles erklären, wie ich diesen bewerkstellige?

gruss jolomino

Pseudemys Nelsoni 5. Apr 2005 01:45

Re: Posex und kein Plan :-(
 
Moin,

ich versteh dein Problem nicht ganz, du kannst doch einfach bis:

Zitat:

<input type=checkbox name=".docs" value="
löschen (Delete()) und dann von 1 bis " -1 kopieren und hast die doc datei.

Das machst du in einer Schleife.

jolomino 5. Apr 2005 02:14

Re: Posex und kein Plan :-(
 
Zitat:

Zitat von Pseudemys Nelsoni
Moin,

ich versteh dein Problem nicht ganz, du kannst doch einfach bis:

Zitat:

<input type=checkbox name=".docs" value="
löschen (Delete()) und dann von 1 bis " -1 kopieren und hast die doc datei.

Das machst du in einer Schleife.

hehe, fürn anfänger ist das ein problem. weil ich nicht im geringsten weiss wo ich ansetzen soll...

naja, trotzdem danke, werde mal mit deinem tipp versuchen was auf die beine zu stellen :-) oder ich finde doch noch was im forum.

gruss jolomino

Pseudemys Nelsoni 5. Apr 2005 02:17

Re: Posex und kein Plan :-(
 
Gib mir die komplette html datei bzw den text daraus, dann schreib ichs dir, aber wenn das nur so ein teil ist kann ich das leider nicht :\

jolomino 5. Apr 2005 06:17

Re: Posex und kein Plan :-(
 
naja, das könnte ich, aber ich möchte es ja alleine schaffen. kleine hilfen sind ok, aber wenn du mir das alles fertig machen willst, dann hab ich daraus nichts gelernt.
ist es denn nicht möglich, nach dem namen klausi+pac.text? zu suchen und alles bis zu den beiden " zu selektieren? ich hab mir das nämlich eben nochmal angeschaut, klausi+pac.text? kommt in der seite auch nur einmal vor.oder das man nach <input type=checkbox name=".docs" value="klausi pac.text"> sucht und beim nächsten <a href="http://myurl.de/dd/33fd3dff/dd/klausi+pac.text?DUcKdUCBBkzOTnEq"> der link selektiert wird.

gruss jolomino

Pseudemys Nelsoni 5. Apr 2005 11:34

Re: Posex und kein Plan :-(
 
Dann kann ich dir nur sagen: Benutz Delete(), Copy() und Pos()

xineohp 5. Apr 2005 11:40

Re: Posex und kein Plan :-(
 
moin,

eine andere (kompliziertere, wegen Einarbeitung aufwendigere) Möglichkeit wäre mit [dp]Regulären Ausdrücken[/dp] zu arbeiten. Damit dann erstmal alle Links aus der Seite zu filtern und schließlich zu schauen welcher "klausi" enthält.

jolomino 6. Apr 2005 09:48

Re: Posex und kein Plan :-(
 
so, habs hinbekommen, aber nur wenn ich die html datei auf dem rechner habe.

Delphi-Quellcode:
procedure TForm1.GetDlLink(FileName: string);
var

 DlSearch: string;
 startpos, endpos, endpos2 : integer;
 quelle: TextFile;

begin

 AssignFile(quelle, FileName);
 Reset(quelle);

 if IOResult = 0 Then

 begin

   while not EOF(quelle) do

   begin

     ReadLn(quelle, DlSearch);
   //Startposition für suche festlegen
     startpos := Posex(DlFile, DlSearch);

     if startpos > 0 Then

     begin
   //Endposition des Links festlegen
        endpos := Pos('">', DlSearch);
         endpos2 := Pos('"', DlSearch);
   //Downloadlink zurechtschneiden
       DlLink := Copy(DlSearch, endpos2+1, endpos-23);

     end;

   end;

 end;

 CloseFile(quelle);

end;
Aufruf mit:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  //DownloadFile wechles gesucht werden soll
      DlFile := 'test.zip';
      GetDlLink(ExtractFilePath(Application.Exename)+'datei.htm');
end;
2. versuch war mit temphtm := idhttp1.Get(Url) die seite in einem string zu laden. funzt auch bestens.
übergabe sah dann so aus:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  //DownloadFile wechles gesucht werden soll
      DlFile := 'test.zip';
      GetDlLink(temphtm);
end;
nur leider hab ich es noch nicht hinbekommen, den übergebenen string in der Procedure GetDlLink zu verarbeiten, da ja ein file erwartet wird und ein string geliefert wird.
kann mir einer nen tipp geben, wie ich die procedure abändern muss?

gruss jolomino

xineohp 6. Apr 2005 12:45

Re: Posex und kein Plan :-(
 
lade die Seite in eine tStringlist
Delphi-Quellcode:
myStrynglist.Text := temphtm
und ersetze deine while Schleife durch
Delphi-Quellcode:
For i:=0 to myStringlist.Count-1 do
dann kannst du mit myStringlist[i] auf die einzelnen Zeilen zugreifen.
(Vergiss aber nicht die Stringlist vorher zu erzeugen und anschließend wieder freizugeben)

Im Endefekt solltest du dann sowas haben:
Delphi-Quellcode:
var
  myStringlist: tStringlist;
  i: integer;
begin
  myStringlist := tstringlist.Create;
  myStrynglist.Text := temphtm;

  For i:=0 to myStringlist.Count-1 do
  begin
    // 
  end;

  myStringlist.Free;
end;

jolomino 6. Apr 2005 18:42

Re: Posex und kein Plan :-(
 
hi, erstmal danke für die antwort, hab aber noch ein problem.

Delphi-Quellcode:
var
  myStringlist: tStringlist;
  i: integer;
begin
  myStringlist := tstringlist.Create;
  myStrynglist.Text := temphtm;
  DlSearch := myStringlist.text;

  For i:=0 to myStringlist.Count-1 do
  begin
       //Startposition für suche festlegen

     startpos := Posex(DlFile, DlSearch);

     if startpos > 0 Then

     begin
   //Endposition des Links festlegen
        endpos := Pos('">', DlSearch);
         endpos2 := Pos('"', DlSearch);
   //Downloadlink zurechtschneiden
       DlLink := Copy(DlSearch, endpos2+1, endpos-23);

     end;
  end;

  myStringlist.Free;
end;
irgentwie funzt die startpos nicht richtig, es kommt zumindesten als ergebnis ein komischer string raus, welcher sich aus den ersten beiden zeilen zusammen setzt.

gruss jolomino

Khabarakh 6. Apr 2005 19:29

Re: Posex und kein Plan :-(
 
Wozu die Schleife? Du greifst doch mit .Text gleich auf die ganze Datei zu. Laut meiner D2005-Hilfe benötigt PosEx drei Parameter, was sich auch irgendwie logisch anhört, auch wenn ich es noch nie benutzt habe.

jolomino 6. Apr 2005 19:45

Re: Posex und kein Plan :-(
 
ja als parameter gebe ich ja (DlFile, DlSearch), spich dlfile=suchwort und dlsearch=quelltext, der letzte soll ja 1 sein, dieser ist ja default gesetzt.
aber auch ohne schleife funzt es nicht :-(

gruss jolomino

Khabarakh 6. Apr 2005 20:27

Re: Posex und kein Plan :-(
 
Zitat:

[Delphi] function PosEx(const SubStr: string, const S: string, Offset: Integer): Integer;
Ich sehe da keinen Default-Parameter :?:
Wenn du aber sowieso nicht an einer bestimmten Stelle suchen willst, nimm doch gleich Pos.

PS: Was kommt denn als String heraus?

jolomino 6. Apr 2005 22:50

Re: Posex und kein Plan :-(
 
hmmm....dann müsste es doch so, ohne schleife, funktionieren. tut es aber nicht :-(

Delphi-Quellcode:
 //Startposition für suche festlegen
     startpos := Posex(DlFile, DlSearch, 1);

     if startpos > 0 Then

     begin
   //Endposition des Links festlegen
        endpos := Pos('">', DlSearch);
         endpos2 := Pos('"', DlSearch);
   //Downloadlink zurechtschneiden
       DlLink := Copy(DlSearch, endpos2+1, endpos-23);

     end;
wobei doch 1 eigentlich doch gegeben ist, laut beschreibung : unsigned Offset = 1

jolomino 7. Apr 2005 07:51

Re: Posex und kein Plan :-(
 
ob der suchbegriff in einer datei steht oder in einem string, dass sollte doch wohl egal sein...oder? wenn ich die datei speichere funktioniert das sowas von wunderbar, aber dann muss ich sie anschliessend immer wieder löschen. und da ich die datei doch so oder so zeilenweise in einen string lade, verstehe ich eben nicht warum es nicht funktioniert.

gruss jolomino

xineohp 7. Apr 2005 12:39

Re: Posex und kein Plan :-(
 
moin,

du hast da was falsch gemacht :mrgreen::

Delphi-Quellcode:
var
  myStringlist: tStringlist;
  i: integer;
begin
  myStringlist := tstringlist.Create;
  myStrynglist.Text := temphtm;
  // das hier ist Müll: DlSearch ist bei dir eine Textzeile, myStringlist.Text aber derganze Text!
  // DlSearch := myStringlist.text;
 

  For i:=0 to myStringlist.Count-1 do // du gehst mit dierser Schleife durch die einzelnen Zeilen der Seite, wie mit ReadLn
  begin
     //Startposition für suche festlegen

     DlSearch := myStringlist[i]; // so is richtig
     startpos := Posex(DlFile, DlSearch);

     if startpos > 0 Then

     begin
   //Endposition des Links festlegen
        endpos := Pos('">', DlSearch);
         endpos2 := Pos('"', DlSearch);
   //Downloadlink zurechtschneiden
       DlLink := Copy(DlSearch, endpos2+1, endpos-23);

     end;
  end;

  myStringlist.Free;
end;

Den gesamten Text aufeinmal zu durchsuchen wird so nicht funktioniern, da '"' und '">' nur in dieser einen Zeile die richtigen Begrenzer sind.

jolomino 7. Apr 2005 18:56

Re: Posex und kein Plan :-(
 
@xineohp:
tja, was soll ich sagen? danke danke danke :bounce1: es funzt :mrgreen:
und das beste ist, ich habs verstanden...1000mal thx

gruss jolomino


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 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