C++ Aus dem Gefundenen in einer Textdatei etwas extrahieren

rasidrasid

Cadet 3rd Year
Registriert
Apr. 2014
Beiträge
55
Hallo,

ich will ein c++-Programm schreiben, das mir in einer Datei zb. das Hallo (unterschiedlicher Schreibart) findet. Mein geschriebenes Programm liest jede Zeile aus, schaut nach dem Gewünschten und wenn ja, dann gibt es hier im Fall "hab ich" aus. Danach will ich innerhalb der Zeile wo dieses hallo oder Hallo oder HALLO steht, noch Name=Mustermann finden und nur Mustermann extrahieren. Also die Zeile sieht so aus:

(das unterschiedlich geschrieben Hallo) blablablablablabal,?"!!!!!!!!! Name=Mustermann

Also innerhalb der gefundenen Hallo-Zeile das Mustermann finden und in ein string speichern.

Das unten ist mal mein Anfang. Leider funktioniert das schon nicht ganz. Ich bekommen über die ganzen Zeilen "hab ich" raus. Also Textdatei 80 Zeilen dann eben 80 mal "hab ich". Arbeitet da die if-Schleife nicht?

Kann jemand helfen? Danke

Code:
int main ()
{
const char T0[] = ("Hallo");
const char T00[] = ("hallo");
const char T000[] = ("HALLO");
ifstream h;
    string s, todb;
    h.open("suchen.txt", ios::in);
    while (!h.eof()) 
    {        
        getline(h, s); 
        if((s.find(T0)) || (s.find(T00)) || (s.find(T000)))
              { cout << "hab ich" << endl;}
    }

}
 
Schau doch mal nach, welchen Rückgabewert string::find() hat, wenn etwas gefunden wird und, viel wichtiger, wenn NICHTS gefunden wird.
 
Schön haste das gemacht... Ich versuch den TE zum Selbststudium zu animieren, was ihm langfristig etwas bringt... du statt dessen kaust ihm allen Mist vor und erziehst ihn zum unselbständigen Informations-Schmarotzer.

Wer sagt dir, dass das oben keine Hausaufgabe war, die du ihm jetzt halb gelöst und dabei jeglichen Lerneffekt zerstört hast?
 
Daaron schrieb:
Wer sagt dir, dass das oben keine Hausaufgabe war, die du ihm jetzt halb gelöst und dabei jeglichen Lerneffekt zerstört hast?

In diesem Fall (bzw auch wenns keine HA war), gibts für den TE :stock: : Es gibt keine IF-SCHLEIFE !!!!
 
Erstmal vielen Dank.

Es ist keine HA. Durch diese Zeit bin ich durch:p

Ich danke für die Idee zum Nachdenkanimieren, aber manchmal ist es hilfreicher wenn man direkt eine Lösung bekommt. Bekommst Du ja auch, wenn Du Deinen Arbeitskollegen fragst. Der sagt Dir ja auch nicht: geh und schau da und da nach. Ich glaube der oder die könnten mir nicht mehr in die Augen schauen beim nächsten mal. Den jeder Mensch wird irgendetwas von einem anderen Menschen irgendwann brauchen. Ich glaube Foren sind keine Lernportale sondern Hilfsportale.

Aber dennoch vielen Dank.

Könnte mir bitte noch jemand mit dem Extrahieren helfen.

Danke.
 
rasidrasid schrieb:
Code:
const char T0[] = ("Hallo");
const char T00[] = ("hallo");
const char T000[] = ("HALLO");

Und was wenn irgend so ein fieser Sack "hAlLO" in die Datei schreibt? :p Lies dir mal die Doku zu den Funktionen std::toupper() und std::tolower() durch und dann schau mal, ob dich das weiter bringt.

P.S. Oder noch schöner, schau dir mal diese von hier http://stackoverflow.com/questions/3152241/case-insensitive-stdstring-find geklaute Funktion an.

Code:
bool findStringIC(const std::string & strHaystack, const std::string & strNeedle)
{
  auto it = std::search(
    strHaystack.begin(), strHaystack.end(),
    strNeedle.begin(),   strNeedle.end(),
    [](char ch1, char ch2) { return std::toupper(ch1) == std::toupper(ch2); }
  );
  if (it != strHaystack.end() ) return true;
  return false;
}

Die könntest du für deine Bedürfnisse anpassen und hättest dann eine case-insensitive find-Funktion.
 
Zuletzt bearbeitet:
Daaron schrieb:
Schön haste das gemacht... Ich versuch den TE zum Selbststudium zu animieren, was ihm langfristig etwas bringt... du statt dessen kaust ihm allen Mist vor und erziehst ihn zum unselbständigen Informations-Schmarotzer.

Wer sagt dir, dass das oben keine Hausaufgabe war, die du ihm jetzt halb gelöst und dabei jeglichen Lerneffekt zerstört hast?

Hast du Fieber?
 
Zurück
Oben