AGB  ·  Datenschutz  ·  Impressum  







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

HTML Datei parsen

Ein Thema von EConvertError · begonnen am 23. Jun 2004 · letzter Beitrag vom 25. Jun 2004
Antwort Antwort
Seite 2 von 3     12 3      
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#11

Re: HTML Datei parsen

  Alt 24. Jun 2004, 14:08
Vielen Dank für eure Geduld!

Das mit dem HTML Parser sieht sehr verlockend für mich aus.

Allerdings habe ich schon ein wenig Code, der aber immer scheitert, weil irgendwie eine Endlosschleife entsteht. Vielleicht könnt ihr euch den ansehen. Falls der Fehler nicht gefunden wird, werde ich zur HTML Parser Kompo greifen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  StrList: TStringList;
begin
  StrList:= TStringList.Create;
  StrList.LoadFromFile('result.htm'); //die HTML Datei (siehe Anhang des ersten Post)
  ParseStringList(StrList);
  StrList.Free;
end;

procedure TForm1.ParseStringList(const StrList: TStrings);
var
  I, C, Index: Integer;
begin
  I:= 0;
  while StrList[I] <> 'do
  begin
    if StrList[I]= '<tr bgcolor="#C6D6D6">then begin //danach kommt eine Zeile in der Tabelle
      Index:= I;
      for C:= 1 to 9 do begin //eine Zeile in der Tabelle entspricht 9 Zeilen HTML Code
        Inc(Index);
        ParseLine(StrList[Index]);
      end;
    end;
    Inc(I);
  end;
end;

procedure TForm1.ParseLine(Line: String);
var
  FPos, SecPos: Integer;
begin
  Line:= Trim(Line);
  while Pos('<', Line) > 0 do begin
    FPos:= Pos('<', Line);
    SecPos:= Pos('>', Line);
    Delete(Line, FPos, SecPos-FPos+1);
  end;
  Memo1.Lines.Add(Line); //Anzeigen zu Testzwecken
end;
Mit freudlichen Grüßen,
EConvertError
Andreas N.
  Mit Zitat antworten Zitat
Benutzerbild von Cubbie
Cubbie

Registriert seit: 22. Sep 2003
Ort: Hannover
16 Beiträge
 
Delphi 7 Personal
 
#12

Re: HTML Datei parsen

  Alt 24. Jun 2004, 14:23
Hi,

wie wärs denn damit, der Reihe nach alle '>' - Zeichen in der Zeile zu suchen (mit Pos) und dann jeweils das dahinter kommende Zeichen anzuschauen. Da gibts dann zwei Fälle:

1. es kommt ein '<' - Zeichen
Dann eben ab dort das nächste '>' suchen und weiter im Text..

2. es kommt was anderes
Das sollte (zumindest im obigen Fall) dann einer der gesuchten Strings sein, den man mit Copy ausschneiden kann (von aktueller Position bis Position des nächsten '<', die man wieder mit Pos rauskriegt).

Auf Newlines müsste man vielleicht noch abfragen, falls du nicht Zeile für Zeile durchgehst.
Ist sicher keine allzu elegante Lösung, aber müsste klappen..

Sorry für die rein theoretische Ausführung, aber bevor ich hier Code hinknalle, den ich nicht testen kann, mach ichs lieber so..

Gruß,
Marc
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#13

Re: HTML Datei parsen

  Alt 24. Jun 2004, 14:30
Klingt auch gut, aber wie suche ich nach dem nächsten '>'?

Pos() liefert doch immer nur das erste passende Zeichen im String.

Mein Ansatz war, dass ich nach einem '<' und '>' suche, und es mit allem dazwischenliegendem herausschneide mit Delete(). Und das so lange, bis ich kein '<' mehr finde. Dann sollte mein gesuchter String übrigbleiben. Das funktioniert auch lange, aber auf einmal bleibt er in der Schleife hängen --> Endlosschleife.

EConvertError
Andreas N.
  Mit Zitat antworten Zitat
moritz

Registriert seit: 18. Apr 2003
1.037 Beiträge
 
#14

Re: HTML Datei parsen

  Alt 24. Jun 2004, 14:35
Warum denn keine Regulären Ausdrücke? Sind super schnell und wenn du ihn einmal hast läufts wie geschmiert!
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#15

Re: HTML Datei parsen

  Alt 24. Jun 2004, 14:39
Weil ich um ehrlich zu sein, noch nicht einmal weiß, was Reguläre Ausdrücke sind.
Andreas N.
  Mit Zitat antworten Zitat
moritz

Registriert seit: 18. Apr 2003
1.037 Beiträge
 
#16

Re: HTML Datei parsen

  Alt 24. Jun 2004, 14:41
Dem kann geholfen werden:
http://de.selfhtml.org/cgiperl/sprache/regexpr.htm
Mehr Bei Google suchenReguläre AND Ausdrücke
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer
  Mit Zitat antworten Zitat
Benutzerbild von Cubbie
Cubbie

Registriert seit: 22. Sep 2003
Ort: Hannover
16 Beiträge
 
Delphi 7 Personal
 
#17

Re: HTML Datei parsen

  Alt 24. Jun 2004, 14:52
Zitat von EConvertError:
Klingt auch gut, aber wie suche ich nach dem nächsten '>'?

Pos() liefert doch immer nur das erste passende Zeichen im String.
Ab Delphi 7 gibt es PosEx, da kann man die Startposition für die Suche angeben. Sonst müsste man mit einem temporären String arbeiten, wo immer der schon abgearbeitete Teil abgeschnitten wird.

Zitat von EConvertError:
Mein Ansatz war, dass ich nach einem '<' und '>' suche, und es mit allem dazwischenliegendem herausschneide mit Delete(). Und das so lange, bis ich kein '<' mehr finde. Dann sollte mein gesuchter String übrigbleiben. Das funktioniert auch lange, aber auf einmal bleibt er in der Schleife hängen --> Endlosschleife.
Das klingt eigentlich so, als obs funktionieren müsste... könnte mir nur vorstellen, dass das Delete vielleicht ein '<' oder '>' beim Wegschneiden "vergisst" und so nie fertig wird...

EDIT: Ne... habs mir mal angeschaut. Das hier ist deine Problemzeile (die erste... ob das später nochmal auftritt, weiß ich nicht):

<td><font class="normtxt" size="2" face="Arial">-> 22.6. / 5</font></td> Wenn er hier nämlich die ersten beiden Tags weggeschnitten hat, findet er plötzlich ein > VOR einem <... und dann wird nix gelöscht.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: HTML Datei parsen

  Alt 24. Jun 2004, 17:54
Moin EConvertError,

i.d.R. sind HTML Dateien ja nicht sehr gross, also könntest Du die einfach in eine Stringvariable einlesen, und könntest dann einfach mit Indizes, ganz ohne Pos, die Texte filtern.
Voraussetzung wäre natürlich, dass die Datei syntaktisch korrekt ist, damit auch immer < > Paare vorhanden sind, wo sie hingehören.
Ausserdem müsste sichergestellt sein, bei der einfachen Variante, dass keine Scriptsprachen eingebettet sind, die eventuell diese Zeichen in Strings enthalten, dadurch könnte sonst die Zählung durcheinander geraten.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#19

Re: HTML Datei parsen

  Alt 24. Jun 2004, 19:14
Ich bin ja richtig beeindruckt von eurer Hilfsbereitschaft! Danke!

Wie ich das so sehe, ist genau das das Problem: In diesem String '-> 22.6. / 5' kommt ein Sonderzeichen (>) vor.

Da ich stolzer Besitzer von Delphi 7 bin, könnte ich zuerst die Position des '<' Zeichens ermitteln und dann mittels PosEx() die zweite Klammer:

Delphi-Quellcode:
FPos:= Pos('<', Line);
    SecPos:= PosEx('>', Line, FPos); //FPos= Offset
...vorausgesetzt das '<' Zeichen kommt in keinem String vor.
Oder liege ich da falsch?

mfg,
EConvertError
Andreas N.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: HTML Datei parsen

  Alt 24. Jun 2004, 20:56
Moin EConvertError,

ein String in der gezeigten Form dürfte in einer HTML-Datei aber eigentlich nicht vorkommen, sondern müsste durch &gt; ersetzt worden sein.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 23:00 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