Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Gewisse Stelle aus einem Text abspeichern. (https://www.delphipraxis.net/67022-gewisse-stelle-aus-einem-text-abspeichern.html)

CodenameCookie 8. Apr 2006 00:33


Gewisse Stelle aus einem Text abspeichern.
 
Hallöchen :),

suche eine Funktion bzw einen kleinen Rat um auf einem kompletten text immer abschnitte rauszusuchen und abzuspeichern.

Habe hier einen Quelltext vor mir mit einer menge(!) von Links, Beispiel:

( nein, die Links haben keine beschriftung :) ).

Nun möchte ich alles was im Text (egal wo) zwischen * <a href=" * und * "> * steht abspeichern. Werde es wohl nacher einfach in eine memo schreiben lassen , allerdings weiss ich nicht , wie ich diese Abschnitte suche, und vor allem immer den Link rauskopiere.

PS: hoffe dass ich bei der Suchaktion nichts übersehen habe.

Danke im Vorraus

CC :bounce1:

ringli 8. Apr 2006 01:07

Re: Gewisse Stelle aus einem Text abspeichern.
 
Eine Möglichkeit wäre so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s, s1 : String;
  Pos1, Pos2 : Integer;
begin
  s := '[url="index.php?id=1"][/url]';
  Pos1 := PosEx('"', s, 1);
  Pos2 := PosEx('"', s, Pos1 + 1);
  s1 := Copy (s, Pos1 + 1 , Pos2 - Pos1 - 1);
  showmessage('Pos1 ' + IntToStr(Pos1) + #13#10 +
              'Pos2 ' + IntToStr(Pos2) + #13#10 +
              'Link ' + s1);
end;

Klaus01 8. Apr 2006 08:00

Re: Gewisse Stelle aus einem Text abspeichern.
 
oder so

Delphi-Quellcode:
Function extracturl(link:string):String;
begin
  link:=copy(link,pos('"',link),length(link));
  link:=copy(link,1,pos('"',link)-1);
  result := link;
end;


s:=extractURL('[url="index.php?id=1"][/url]');
Grüße
Klaus

Hawkeye219 8. Apr 2006 11:21

Re: Gewisse Stelle aus einem Text abspeichern.
 
@Klaus01
Die erste Zeile Deiner Funktion löscht das linke Anführungszeichen nicht, es wird somit beim zweiten Pos() erneut gefunden. Hier die korrigierte Version:

Delphi-Quellcode:
function ExtractURL (const aLink: string): string;
begin
  Result := Copy(aLink, Pos('"', aLink) + 1, MaxInt);
  Result := Copy(Result, 1, Pos('"', Result)-1);
end;
Vielleicht sollte man auch noch eine Überprüfung einbauen, ob überhaupt ein URL im String enthalten ist.

Gruß Hawkeye

DGL-luke 8. Apr 2006 15:00

Re: Gewisse Stelle aus einem Text abspeichern.
 
Suche mal nach Hier im Forum suchenTRegex - regular expressions sind das non-plus-ultra beim parsen/durchsuchen von texten.

Der Regex "|(.*?)|" sollte dir url und Text eines beliebigen Links geben. Eventuell muss du die öffnende spitze Klammer (<) maskieren, das weiss ich grad nicht, die könnte als lookbehind erkannt werden.

Ach ja: www.regular-expressions.info - da steht so ziemlich alles, was man wissen muss.

EDIT: man kann die url natürlich noch beschränken, so dass nur "echte" urls gefunden werden - aber ich denke, das ist unnötig

r2c2 8. Apr 2006 16:07

Re: Gewisse Stelle aus einem Text abspeichern.
 
Ne andere Möglichkeit wäre ExplodeExplode(eigentlich nicht dafür gedacht, sollte aber funktionieren) oder TDivStrListTDivStrList(für diesen fall wohl etwas überdimensioniert(außer du willst die Links ändern)). Der beste Weg wäre aber wohl wie schon erwähnt Hier im Forum suchenTRegEx...

mfg

Christian

Klaus01 8. Apr 2006 16:12

Re: Gewisse Stelle aus einem Text abspeichern.
 
@Hawkeye219
Danke!

Grüße
Klaus

marabu 8. Apr 2006 17:06

Re: Gewisse Stelle aus einem Text abspeichern.
 
Hallo.

Da es sich bei dem Text offensichtlich um HTML-Code handelt, würde ich ihn auch als solchen behandeln. Mit der Prozedur ExtractLinks() werden alle hyperlinks aus einem HTML-Document heraus geholt, auch wenn sie nicht Attributwert eines Anchor-Elements sind:

Delphi-Quellcode:
procedure ExtractLinks(doc: IHTMLDocument2; s: TStrings);
var
  ec: IHTMLElementCollection;
  e: IHTMLElement;
  i: integer;
  url: Variant;
begin
  ec := doc.links;
  for i := 0 to Pred(ec.length) do
  begin
    e := ec.item(i, 0) as IHTMLElement;
    url := VarToStr(e.getAttribute('href', 0));
    if url <> '' then
      s.Add(url);
  end;
end;
Grüße vom marabu


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