AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Alle Image-Links aus HTML-String extrahieren (schnell)?
Thema durchsuchen
Ansicht
Themen-Optionen

Alle Image-Links aus HTML-String extrahieren (schnell)?

Ein Thema von PeterPanino · begonnen am 13. Apr 2015 · letzter Beitrag vom 14. Apr 2015
 
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
510 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Alle Image-Links aus HTML-String extrahieren (schnell)?

  Alt 14. Apr 2015, 00:27
Ok, konnte es doch nicht sein lassen und habs schon jetzt gemacht ^^
Bild und Projekt ist angehängt, und die Parszeit ist minimal (0.001s - zusehen im Titel vom Fenster)

Hier die Klasse:
Delphi-Quellcode:
unit ImgPathParser;

interface

uses
  Classes, SysUtils;

type
  TImgPathParser = class
  private
    function FGetImgPath(Index : integer) : string;
    function FGetCount : integer;
  public
    ImgPaths : TStringList;
    procedure Parse(AHTML : string);
    property Count : Integer read FGetCount;
    property ImgPath[Index : integer] : string Read FGetImgPath;
  end;

var
  RealativeLink : string = 'http://www.delphipraxis.net/'; // Um einen Relativen Link generieren zu können.

implementation

{ TImagPathParser }

function TImgPathParser.FGetCount: integer;
begin
  Result := ImgPaths.Count;
end;

function TImgPathParser.FGetImgPath(Index: integer): string;
begin
  Result := ImgPaths[Index];
end;

procedure TImgPathParser.Parse(AHTML: string);
var
  CurrentCharIndex: Integer;
  CurrentChar : Char;
  InString : Boolean;
  Buffer : string;
  Extension : string;
begin
  Buffer := '';
  InString := false;
  ImgPaths := TStringList.Create;

  for CurrentCharIndex := 1 to Length(AHTML) do
  begin
    CurrentChar := AHTML[CurrentCharIndex];

    if (not InString) and
       (CurrentChar = '"') then
    begin
      InString := true;
      Continue;
    end;

    if InString then
    begin
      if CurrentChar = '"then
      begin
        Extension := LowerCase(Copy(Buffer, Length(Buffer)-2,3));

        // !!! EXTENSIONS !!!
        if (Extension = 'png') or
           (Extension = 'gif') or
           (Extension = 'jpg') or
           (LowerCase(Copy(Buffer, Length(Buffer)-3,4)) = 'jpeg') then
        begin
          if Copy(Buffer, 0, 7) <> 'http://then
            Buffer := RealativeLink + Buffer;
        
          ImgPaths.Add(Buffer);
        end;

        InString := false;
        Buffer := '';

        Continue;
      end;

      Buffer := Buffer + CurrentChar;
    end;

  end;
end;

end.
Benutzen kannst du sie so:
Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
var
  StartTime : TDateTime;
begin
  StartTime := Now;

  ImgPaths.Parse(mmo1.Text);

  Text := FloatToStr(MilliSecondsBetween(Now,StartTime) / 1000) + 's';
end;
Hoffe, das ist in etwa so wie du es brauchst

Freundliche Grüsse
Angehängte Grafiken
Dateityp: jpg pXtZ.jpg (150,1 KB, 29x aufgerufen)
Angehängte Dateien
Dateityp: zip ImgPathParser.zip (968,4 KB, 11x aufgerufen)
Milos

Geändert von milos (14. Apr 2015 um 00:30 Uhr)
  Mit Zitat antworten Zitat
 

 

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 04:58 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