Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Mit readln nur bestimmte Textstelle auslesen (https://www.delphipraxis.net/157285-mit-readln-nur-bestimmte-textstelle-auslesen.html)

hamptoncourt 6. Jan 2011 15:53

Mit readln nur bestimmte Textstelle auslesen
 
Hallo Leute, ich habe mal wieder ein Problem :-/ ...

Ich möchte eine TXT-Datei einlesen, die einen Quellcode einer Homepage beinhaltet. In einem Meofeld sollen nur die Überschriften der Themen ausgegeben werden. Ich lese die Datei als Zeile für Zeile mit readln ein.
Er soll die Zeilen quasi solange lesen, bis er den Text "H1" findet. Dann springt er zu dem Text, der sich zwischen einem größer- und einem kleiner-Zeichen befindet ( also: >auszugebener Text<). Diesen soll er dann in das Memo-Feld eintragen ...

Ich dachte, ich könnte das mit diesem Ansatz lösen:

Delphi-Quellcode:
var s : string; f : textfile;

repeat
readln(f,s);
Memo1.Lines.Add(s);
Until eof (f);
Hierbei gibt er natürlich einfach das komplette Dokument in dem Memo-Feld aus ... wie kann ich also den Bereich spezifizieren, der für mich interessant ist?

Habe das Forum schon einmal durchsucht, aber bislang nichts zu diesem Thema gefunden ...

Danke euch schonmal im voraus ...

Gruß
HC

implementation 6. Jan 2011 15:58

AW: Mit readln nur bestimmte Textstelle auslesen
 
Hier hast du eine weitere Abbruchbedingung:

Lass die Schleife doch dann beenden, wenn die Zeile "H1" beinhaltet.
Das kannst du mit Pos() prüfen.

Deep-Sea 6. Jan 2011 16:11

AW: Mit readln nur bestimmte Textstelle auslesen
 
Wäre es nicht einfacher, die (X)HTML-Datei mit Hilfe eines XML-Parsers zu durchsuchen? :gruebel:

implementation 6. Jan 2011 16:14

AW: Mit readln nur bestimmte Textstelle auslesen
 
Zitat:

Zitat von Deep-Sea (Beitrag 1072667)
Wäre es nicht einfacher, die (X)HTML-Datei mit Hilfe eines XML-Parsers zu durchsuchen? :gruebel:

Also wenn dann wohl einen spezialisierten HTML-Parser, sonst wirst du Probleme mit <br> usw. kriegen, falls es kein echtes XHTML ist ...

sx2008 6. Jan 2011 16:17

AW: Mit readln nur bestimmte Textstelle auslesen
 
Zitat:

Zitat von hamptoncourt (Beitrag 1072660)
die einen Quellcode einer Homepage beinhaltet

Dann solltest du einen HTML-Parser benützen.
Es wird zwar immer wieder versucht HTML mit Standard Stringfunktionen wie Copy, Pos und Delete zu verarbeiten, aber sobald die Seite etwas komplexer wird ist das zum Scheitern verurteilt.
Es ist ungefähr so, als wollte man einen PKW-Motor nur mit einem Schraubenzieher bewaffnet ausbauen.

p80286 6. Jan 2011 16:24

AW: Mit readln nur bestimmte Textstelle auslesen
 
Einspruch Euer Ehren, wenn es wirklich nur um 3 oder 4 Zeilen, die ganz klar identifizierbar sind, geht, ist ein Parser nur Overkill.

Ich würde allerdings TStringlist verwenden, da, wenn ich mich recht erinnere, readln nur mit shortstrings umgehen kann.

Gruß
K-H

hamptoncourt 6. Jan 2011 16:30

AW: Mit readln nur bestimmte Textstelle auslesen
 
Ja, vielleicht, wir sollen das allerdings für die Uni auf diese Weise lösen ...

Mit Pos()???? Wie mache ich das??? Das Prinzip kenne ich noch gar nicht ...

DeddyH 6. Jan 2011 16:33

AW: Mit readln nur bestimmte Textstelle auslesen
 
Delphi-Referenz durchsuchenPos
Ist das denn so schwer? :roll:

hamptoncourt 6. Jan 2011 21:40

AW: Mit readln nur bestimmte Textstelle auslesen
 
Naja, für jemanden, für den das noch neuland ist, ist es schon etwas komplizierter *lol*

Ich denke, ich verstehe, wie das mit dem TStringList und dem Pos() funktionieren soll. Aber irgendwie ist mir nicht klar, wie ich die Anweisung geben kann, dass er in der Zeile mit H1 weiter ließt bis zum >-Zeichen und dann den Text ein ließt ...

DeddyH 6. Jan 2011 21:46

AW: Mit readln nur bestimmte Textstelle auslesen
 
Du ermittelst mit Pos die Position des Tags (also H1 in Deinem Fall). Nun gehst Du mit Delphi-Referenz durchsuchenPosEx zum nächsten schließenden Tag und ermittelst wieder mit PosEx die Position des nächsten öffnenden. Alles dazwischen kopierst Du nun.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 Uhr.
Seite 1 von 2  1 2      

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