HTML nach Wert Durchsuchen
-
wie such ich in einem HTML Quellcode nach einen ganzbestimmten abschnitt
bsp.
ich hab in einer html seite einen abschnitt mit<h1 id="tut_title">Das ist Hier</h1>ich möchte nun alles von
<h1 id="tut_title">bis
</h1>auslesen
ener ne idee
-
ist doch ganz einfach die datei durchlesen bis man auf <h1 id="tut_title"> stost dann alles speichern bis man auf </h1> stosst.
Wenn du nicht weist wie du das implentieren sollst dann google mal ein bisschen.mfg tobZel
-
Wichtig ist nur, die Datei NICHT binär auszulesen.
-
n paar stichworte nach was ich googlen soll denn ich google scho den halben tag
THX

-
hmm
std::ifstream ... std::string ... std::string::find ... std::find_first_of (muss dann halt als anfangspos die pos von std::find nehmen ... damit bestimmst de das schließen tag ...) ...
-
CodeFinder schrieb:
Wichtig ist nur, die Datei NICHT binär auszulesen.
wie sonst?
-
Versteh nur ??

-
halt std::ios::binary weglassen ...
std::ifstream file_stream(std::ios::in); if (file_stream.is_open() == false || file_stream.good() == false) return false; // so oder ähnlich jede Zeile in der Datei einlesen ... std::string string_line; std::getline(file_stream, string_line); // dann einfach mit find ran gehen ... std::string::size_type pos_begin = string_line.find("<h1 id="tut_title">", 0); if (pos == std::string::npos) std::cout << "Not found" << std::endl; else { std::string::size_type pos_end = string_line.find("</h1", pos_begin); if (pos == std::string::npos) std::cout << "Invalid html ... tag not closed!" << std::endl; else { // pos_end und pos_begin für deinne kram nutzen ^^ } } file_stream.close();hab es hier nur rein gehauen ... dh sind Fehler drin (denk ich mal
)
-
sieht aber net übel aus isn anfang mit dem man was anfangen kann danke ich hab gerad an dem herumgebastelt
[code] char c; char name = '<>'; Flag=0; while((c = fgetc(d1))!=EOF) { if(c == name) { Flag = 5; continue; } if(c == ']') { Flag = 0; fprintf(d2,"\n"); } if(Flag) fprintf(d2,"%c",c); } [/code]aber dein code is besser

-
ten schrieb:
CodeFinder schrieb:
Wichtig ist nur, die Datei NICHT binär auszulesen.
wie sonst?
Wie (D)Evil schon gepostet hat (danke
!), eben im Text-Mode (
Also das Flag std::ios::binary nicht angeben).
-
klar hab das bisher ja scho überlesen nur henge ich an dieser possition
// so oder ähnlich jede Zeile in der Datei einlesen ... std::string string_line; std::getline(file_stream, string_line);
-
Ist eigentlich das:
if (file_stream.is_open() == false || file_stream.good() == false) return false;unperformanter, als das:
if (!file_stream.is_open() || !file_stream.good()) return false;?
(Kürzer ist es allemal
.)
-
ja allemal nur getline spuckt hier nur fehler aus
-
wofür steht das pos bzw welchen wert hat er mein kompiler sagt
error C2065: 'pos': nichtdeklarierter Bezeichnerif (pos == std::string::npos) std::cout << "Not found" << std::endl;
-
hmm sorry sachte ja sind tippfehler drin ... aber wenn du den code verstehen würdest wüsstes du es ... es muss pos_begin heißen ... es wird halt, falls das net gefunden wird von std::string::find nen std::string::npos zurück geliefert ...
-
hab ich mir scho gedacht, hatte das irgendwann mal gelesen
-
ich find's ja unnötig kompliziert. hier mal ein einfaches beispiel mit 'strstr'
#include <stdio.h> #include <string.h> int main() { char *test = "hello <x>what's this?</x> world"; char *tag_open = "<x>", *tag_close = "</x>"; char *p1, *p2; p1 = strstr (test, tag_open); if (p1) { p1 += strlen (tag_open); p2 = strstr (p1, tag_close); if (p2) while (p1 < p2) putchar (*p1++); } }
-
interesantes Beispiel
-
Ascharan schrieb:
interesantes Beispiel
jo, musst es nur erweitern, indem du die html-datei in den speicher holst und eine 0 dranhängst (string-ende). strstr braucht ja zugriff auf alles, mit einzel-bytes-einlesen geht strstr leider nicht, aber dafür ist es sicher schneller als dieses ganze c++ gefrickel von weiter oben.

edit: und nicht die datei zeilenweise einlesen. das geht schief. in HTML hat ein zeilenende keine bedeutung...
-
Jo das versuch ich grad es is auf jeden fall einfacher