HTML nach Wert Durchsuchen



  • 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



  • hmm bababa doch kein C ...

    #include <iostream>
    #include <string>
    #include <fstream>
    #include <vector>
    
    bool read_html_content(const std::string&, const std::string&, const std::string&, std::vector<std::string>&);
    
    int main(int argc, char* argv[])
    {
      	unsigned int value = 0;
    
    	std::cout << "Tag-Open: " << std::flush;
    	std::string string_tag_beg;
    	std::getline(std::cin, string_tag_beg);
    	std::cout << "Tag-Close: " << std::flush;
    	std::string string_tag_end;
    	std::getline(std::cin, string_tag_end);
    
    	std::vector<std::string> found_content;
    
    	read_html_content(string_tag_beg, string_tag_end, "test.html", found_content);
    	for (size_t data = 0; data < found_content.size(); ++data)
    		std::cout << found_content[data] << std::endl;
    
    	std::cin.clear();
    	std::cin.ignore(std::cin.rdbuf()->in_avail());
    	std::cin.get();	
    
    	return 0;
    }
    
    bool read_html_content(const std::string& string_tag_beg, const std::string& string_tag_end, const std::string& filename, std::vector<std::string>& vec_data)
    {
    	std::ifstream file_stream(filename.c_str(), std::ios::in);
    
    	if (file_stream.is_open() == false || file_stream.good() == false)
    		return false;
    
    	std::string string_line;
    	std::string string_content;
    	while (file_stream.eof() == false)
    	{
    		std::getline(file_stream, string_line);
    		string_content += string_line;
    	}
    
    	file_stream.close();
    
    	std::string::size_type pos_begin	= 0;
    	string_content.find(string_tag_beg, 0);
    	std::string::size_type pos_end		= 0;
    
    	while (((pos_begin = string_content.find(string_tag_beg, pos_begin + string_tag_beg.length())) != std::string::npos) && ((pos_end = string_content.find(string_tag_end, pos_begin)) != std::string::npos))
    		vec_data.push_back(string_content.substr(pos_begin + (string_tag_beg.length()), pos_end - pos_begin - (string_tag_beg.length())));
    
    	return true;	
    }
    

    ... noch Fragen? 😉 Ist nur ein Fehler drin ... das wäre aber ein wenig komplexer den zu beseitigen ... (dürft mal versuchen drauf zu kommen)

    aja
    test.html

    <html>
        <head>
            <title>Test 01</title>
        </head>
        <body>
            <h1>Test 02</h1><h1>Test 03</h1><h1>Test 04
            </h1>
        </body>
    </html>
    

    aja zum finden des Fehlers mal nen verschachteltes <h1> Element angeben und dann mal als such Element das h1 angeben ...



  • (D)Evil schrieb:

    ...
    

    du lieber himmel 😮
    schon mal jester's signatur gesehen?



  • (D)Evil schrieb:

    hmm bababa doch kein C ...

    sorry and very nice 😃



  • ten:
    die scheint ja auf dich zu zutreffen ... und wenn du mich in irgendeiner weise beleidigen willst ... dann nicht hier, sondern in einem Chat oder auf der Straße ...



  • (D)Evil schrieb:

    ten:
    die scheint ja auf dich zu zutreffen ... und wenn du mich in irgendeiner weise beleidigen willst ... dann nicht hier, sondern in einem Chat oder auf der Straße ...

    ich bin nun mal ein notorischer lästerer.
    nimm's nicht persönlich 😉



  • dein code funktioniert Klasse deinen fehler hab ich gemerkt was du meinst



  • Und wie heißt der Fehler? 😉



  • erwischt keine ahnung aber es funktioniert beispiel nich ein bestimmtes wort zu suchen sondern nur tags bsp: <id> und müssen genau angegeben werden sonst funcs net


Anmelden zum Antworten