aus Text Wort suchen



  • Hallo,

    ich habe eine Datei mit mehreren Zeilen. Ich will diese Zeilen einlesen und nach einem bestimmten Wort suchen. Ich habe dies, aber irgendwie funktioniert es nicht genau wie ich will:

    #include <iostream>
    #include <string>
    #include <cmath>
    #include <fstream>
    #include <vector>
    #include <iterator>
    #include <algorithm>
    #include <sstream>
    #include <istream>
    #include <cstdlib>
    #include <windows.h>
    #include <stdio.h>
    #include <iomanip>
    
    using namespace std;
    
    int main () {
        char *suche;
        char hallo[]="hallo";
    ifstream eingabedatei("test_datei.txt");
    string buffer;
    char *line;
    while( getline( eingabedatei, buffer ) ){
           line==buffer.data();
      suche = strncpy (line,hallo,0);
    cout << suche << endl;
    }
    
    eingabedatei.close();
    system("pause");
    }
    

    Die test_datei.txt sieht so aus:

    keinhallo 3
    hallo 5
    keinhallo 9

    Ich würde gerne hallo finden und die Zahl dahinter in einer Variable abspeichern.

    Danke



  • rasidrasid schrieb:

    Hallo,

    ich habe eine Datei mit mehreren Zeilen. Ich will diese Zeilen einlesen und nach einem bestimmten Wort suchen. Ich habe dies, aber irgendwie funktioniert es nicht genau wie ich will:

    #include <iostream>
    #include <string>
    #include <cmath>
    #include <fstream>
    #include <vector>
    #include <iterator>
    #include <algorithm>
    #include <sstream>
    #include <istream>
    #include <cstdlib>
    #include <windows.h>
    #include <stdio.h>
    #include <iomanip>
    
    using namespace std;
    
    int main () {
        char *suche;
        char hallo[]="hallo";
    ifstream eingabedatei("test_datei.txt");
    string buffer;
    char *line;
    while( getline( eingabedatei, buffer ) ){
           line==buffer.data();
      suche = strncpy (line,hallo,0);
    cout << suche << endl;
    }
    
    eingabedatei.close();
    system("pause");
    }
    

    Die test_datei.txt sieht so aus:

    keinhallo 3
    hallo 5
    keinhallo 9

    Ich würde gerne hallo finden und die Zahl dahinter in einer Variable abspeichern.

    Danke

    Benutz lieber std::string anstatt char * 🙂 Ist einfacher:

    std::ifstream inFile("test_datei.txt");
    
    std::string buf;
    
    while (!inFile.eof())
    {
     std::getline(inFile, buf);
    
     if (buf.find("hallo") != std::string::npos)
     {
      std::cout << "Gefunden. Zeile: " << buf << std::endl
     }
    }
    
    inFile.close();
    

    Das Ausschneiden der Zahl lässt sich mit substr bewerkstelligen 😉



  • Danke für die schnelle Antwort. Könntest Du mir bitte auch den Unterschied erklären 😕

    Dank im Voraus



  • zwischen was? zwischen string und char??

    lg, freakC++



  • ja bitte.
    Wieso einfacher 😕

    Danke



  • rasidrasid schrieb:

    Danke für die schnelle Antwort. Könntest Du mir bitte auch den Unterschied erklären 😕

    Dank im Voraus

    Na ja, char * ist einfach ein Zeiger auf Array von Zeichen. Es ist einfach nur ein Typ und daher nicht besonders komfortabel. Während std::string eine Klasse ist, die Funktionen zum Suchen innerhalb des Strings bereitstellt, usw. Auch vergrößert sich der std::string automatisch. Brauchst du also plötzlich mehr Zeichen, weil du mehr Text speichern willst, übernimmt die gesamte Arbeit die Klasse.

    Hab übrigen das was du willst falsch verstanden. Hier der gesamte Quellcode:

    #include <iostream>
    #include <fstream>
    #include <string>
    
    int main()
    {
    	std::ifstream inFile("test_datei.txt");
    
    	std::string buf;
    	std::string suche;
    
    	while (!inFile.eof())
    	{
    		std::getline(inFile, buf);
    
    		if (buf.find(" ") != std::string::npos) // Leerzeichen vorhanden?
    		{
    			// Position vom Leerzeichen
    			size_t posSpace = buf.find(" ");
    
    			// Ausschneiden:
    
    			// Alles vorm Leerzeichen
    			std::string links = buf.substr(0, posSpace);
    
    			// Alles nach dem Leerzeichen
    			std::string rechts = buf.substr(posSpace + 1);
    
    			if (links == "hallo")
    			{
    				suche = rechts;
    			}
    		}
    	}
    
    	inFile.close();
    
    	std::cout << "Gefunden: '" << suche << "'" << std::endl;
    
    	return 0;
    }
    


  • Dank Dir


Anmelden zum Antworten