Bestimmten String in einer HTML-Datei suchen

The_Maegges

Erfahrenes Mitglied
Servus Leute!

Ich steh momentan vor einem kleinem Problem:

Ich habe ein Proramm geschrieben (mit MFC, allerdings ist das nicht das Problem), dass sich über wget eine dynamisch erzeugte HTML-Datei holt.
Darin werden Usernamen angezeigt, allerdings nicht getrennt durch z.B. Leerzeichen, sondern stehen zwischen >und<.

Nun will ich mir eine Funktion schreiben, die diese Datei (per fstream) öffnet und auf einen (bestimmten) Nutzernamen hin durchsucht.

Ich denke da an eine Funktion

bool IsUserOnline(CString username)

die mir ein "true" zurückgibt, sobald der übergebene Username in der HTML-Datei auftaucht (was er nur tut, wenn er auch online ist).
Habe es schon über getLine versucht, wollte aber nicht so recht...
Ach ja, es muss nicht unbedingt fstream sein, Hauptsache, ich kriege eine Funktion hin, die entsprechend der oben genannten verwendet werde kann.
Da ich auch nicht gerade der beste Programmierer auf Erden bin, wäre ich für Hilfe oder wenigstens einen Denkanstoss in die richtige Richtung dankbar.

Viele Grüsse,
The_Maegges
 
Du könntest die Datei zeichenweise lesen bnis Du ein '>' findest, das nicht zu einem Tag gehört (also eigentlich müßtest Du nach der Zeichenfolge '&gt;' suchen). wenn Du das gefunden hast, liest Du zeichenweise weiter und speicherst die gelesenen Zeichen in einem String bis Du '<' (respektive '&lt;') gefunden hast. DAnn speicherst Du den String in einer Liste. Wenn Du die Datei durch hast, suchst Du in der Stringliste nach dem Usernamen. Das Einlesen und abspeichern solltest Du mit einem Zustandsautomaten realisieren.
Ich bin nicht mehr so fit in HTML, aber ich glaube, das mit '&gt;' und '&lt;' ist richtig.
 
Übrigens habe ich es auch mit deiner Lösung versucht, aber das hat so einfach leider nicht funktioniert, denn rate mal, was das Programm damit gemacht hat:

Code:
<th><font size="2px" color="white" class='spaltentitel'>Name</font></th>

Richtig, es hat sich alles Mögliche in die Liste geholt und dabei teilweise den Benutzernamen total verschluckt.
 
Wenn ich davon ausgehe, daß 'Name' in Deinem Beispiel der Username sein soll, dann hast Du da scheinbar etwas nicht ganz verstanden. Der Username steht nicht etwa im darzustellenden Text zwischen '>' und '<', sondern in der HTML-Datei zwischen zwei HTML Tags. Ein HTML Tag ist eine Anweisung an den HTML Prozessor, etwas bestimmtes zu tun. Eine HTML-Datei besteht aus HTML Tags und dem darzustellenden Text. In diesem Fall steht der Username zwischen den Tags
Code:
 <font size="2px" color="white" class='spaltentitel'>
und
Code:
 </font>
Das bedeutet, das der Name im Browser mit den angegebenen Font-Eigenschaften dargestellt werden soll. Das erste Tag ist das Start Tag, es enthält den Tagnamen und verschiedene Attribute. Das zweite ist das zugehörige End Tag. Es enthält nur den Tagnamen, dem ein '/' vorangestellt ist. Tags sind also kein Bestandteil des darzustellenden Textes. Du mußt also in Deine Liste nur das übernehmen, was nicht Bestandteil eines HTML Tags ist. Wenn du also ein '<' eingelesen hast, liest Du weiter und ignorierst alles, bis Du auf ein '>' stößt. Dann bist Du wieder außerhalb des Tags im darzustellenden Text. Wenn die ganze Datei so aussieht, daß nur die Namen als Text enthalten sind, ist das ganze ja recht einfach. Wenn noch mehr Text drinsteht, wird es etwas komplizierter, da Du irgendwie entscheiden mußt, werlcher Text Name ist und welcher nicht.

P.S.: Wenn man ein Programm schreiben will, das eine HTML-Datei auswertet, sollte man sich wenigstens ein wenig mit der Syntax dieses Dateiformates auseinandersetzen.
 
jokey2 hat gesagt.:
Wenn ich davon ausgehe, daß 'Name' in Deinem Beispiel der Username sein soll, dann hast Du da scheinbar etwas nicht ganz verstanden. Der Username steht nicht etwa im darzustellenden Text zwischen '>' und '<', sondern in der HTML-Datei zwischen zwei HTML Tags. Ein HTML Tag ist eine Anweisung an den HTML Prozessor, etwas bestimmtes zu tun. Eine HTML-Datei besteht aus HTML Tags und dem darzustellenden Text. In diesem Fall steht der Username zwischen den Tags
Code:
 <font size="2px" color="white" class='spaltentitel'>
und
Code:
 </font>
Das bedeutet, das der Name im Browser mit den angegebenen Font-Eigenschaften dargestellt werden soll. Das erste Tag ist das Start Tag, es enthält den Tagnamen und verschiedene Attribute. Das zweite ist das zugehörige End Tag. Es enthält nur den Tagnamen, dem ein '/' vorangestellt ist. Tags sind also kein Bestandteil des darzustellenden Textes. Du mußt also in Deine Liste nur das übernehmen, was nicht Bestandteil eines HTML Tags ist. Wenn du also ein '<' eingelesen hast, liest Du weiter und ignorierst alles, bis Du auf ein '>' stößt. Dann bist Du wieder außerhalb des Tags im darzustellenden Text. Wenn die ganze Datei so aussieht, daß nur die Namen als Text enthalten sind, ist das ganze ja recht einfach. Wenn noch mehr Text drinsteht, wird es etwas komplizierter, da Du irgendwie entscheiden mußt, werlcher Text Name ist und welcher nicht.

P.S.: Wenn man ein Programm schreiben will, das eine HTML-Datei auswertet, sollte man sich wenigstens ein wenig mit der Syntax dieses Dateiformates auseinandersetzen.

Danke für deinen Hinweis, aber ich glaube dass du mich da etwas missverstanden hast.
Übrigens kenne ich mit mit HTML sehr gut aus. ;-]
Na gut, vielleicht hab ich mich etwas unklar ausgedrückt, mein Fehler.
Ich wollte die HTML-Datei nicht nach allen Usernamen durchsuchen, sondern nach einem bestimmten, den ich bereits "kenne".
Insofern kann ich nach dem String ">"+Username+"<" suchen, da der Username zwischen zwei HTML Tags steht.
Zudem habe ich auch keine Liste verwendet, sondern lediglich eine Buffervariable, in die ich die aktuelle Zeile der HTML-Datei lade und anschliessend überprüfe, ob der Name auftaucht.
Das Ganze hat den Hintergrund, dass in der Datei bereits sehr viel Text enthalten ist, der eben nicht "Username" ist.
Somit würde sich die Liste entsprechend mit für mich "uninteressantem Müll" aufblasen, was in der jetzigen Lösung nicht passiert.

@Jens Bond: Danke für den Hinweis. Hätte mir sicher Einiges an Arbeit erspart, aber so hab ich wenigstens etwas dazugelernt
 
Zurück