String: Finden und Ausgeben
-
Also eines von beidem hast du NICHT mir Copy&Paste hier ins Forum gebracht. Du rufst dei Funktion CopyFile auf, der Compiler bemängelt allerdings ein CopyFileW. Davon abgesehen ist das WinAPI, da wird dir wohl im entsprechenden Forum besser geholfen.
-
drakon schrieb:
knudy schrieb:
Nexus schrieb:
knudy schrieb:
Aber wie mache ich das, dass er am Anfang komplett die ganze Datei einliest?! Mit ner Schleife?!
Ja, solange in einer Schleife einlesen, bis du zu
eof()kommst...und was für ne schleifenbedingung knall ich da rein?
Na die Prüfung, ob eof gesetzt ist:
http://www.cplusplus.com/reference/iostream/ios/eof/Hab ich nun aber es geht immer noch nicht

Sagt mir zwar keine Fehlermeldung aber er findet auch ncihts, obwohl in der ersten Zeile Tobias steht.fstream f; string sAuslesen; f.open("./adressbuch.txt", ios::in); while (! f.eof()) { getline(f, sAuslesen); } f.close(); string::size_type sGefunden = sAuslesen.find( "Tob", 0 ); if( sGefunden != string::npos ) cout << "Gefunden: " << sGefunden << endl; else cout << "Nichts gefunden!" << endl;
-
knudy schrieb:
Sagt mir zwar keine Fehlermeldung aber er findet auch ncihts, obwohl in der ersten Zeile Tobias steht.
fstream f; string sAuslesen; f.open("./adressbuch.txt", ios::in); while (! f.eof()) { getline(f, sAuslesen); } f.close(); string::size_type sGefunden = sAuslesen.find( "Tob", 0 ); if( sGefunden != string::npos ) cout << "Gefunden: " << sGefunden << endl; else cout << "Nichts gefunden!" << endl;Das ist das Problem. Es steht in der ersten Zeile, nicht in der letzten. Du liest alles Zeilen nacheinander jedesmal in die gleiche stringvariable, überschreibst sie also jedesmal. Das heißt das, was du am Ende analysierst ist die letzte Zeile.
Pack entweder alle Zeilen nacheinander in einen Container oder analysiere jede Zeile innerhalb der Schleife.
-
Danke.
Hat nun geklappt:while (! f.eof()) // Schleife weil er Zeile für Zeile einlesen muss. | eof = End of File { getline(f, sAuslesen); string::size_type sGefunden = sAuslesen.find( sSucheingabe, 0 ); if( sGefunden != string::npos ) { string sAusgabe = sAuslesen.substr(sGefunden); cout << "Gefunden: " << sGefunden <<" | Ausgabe: "<<sAusgabe<< endl; } }Aber nun möchte ich, dass wenn nichts gefunden wurde auch ein
"Es wurde leider nichts gefunden"
kommt.also else gehts nicht weil er sonst nach jeder Zeile (bei der er nichts findet) gleich nen else rauskloppt
-
Mach vor die Schleife eine bool-Variable (initial "false"), setze sie auf "true" wenn der String gefunden wurde und prüfe die Variable hinter der Schleife.
-
Badestrand schrieb:
Mach vor die Schleife eine bool-Variable (initial "false"), setze sie auf "true" wenn der String gefunden wurde und prüfe die Variable hinter der Schleife.
Wie meinst du das genau?
Und noch ne kleine Frage:
Wenn ich etwas finde, sagt er mir ja an welcher Stelle er es findet und liest die restliche Zeile aus.
Wie mache ich das, dass wenn irgendwo was findet die komplette Zeile ausgibt auch wenn den "linken" Teil der gefundenen Stelle..Beispiel:
Es wird nach "Pe" gesucht.Name: Peter Pan
Er findet Pe und gibt Peter Pan aus
Möchte aber das er komplett
Name: Peter Pan ausgibt.
-
ok mit der ganze zeile auslesen habe ich nun gelöst bekommen.
aber den bool-vorschlag hab ich noch nicht ganz verstanden.
-
Ich glaub er meint das so:
bool found = false; while (! f.eof()) { getline(f, sAuslesen); string::size_type sGefunden = sAuslesen.find( sSucheingabe, 0 ); if( sGefunden != string::npos ) { string sAusgabe = sAuslesen.substr(sGefunden); cout << "Gefunden: " << sGefunden <<" | Ausgabe: "<<sAusgabe<< endl; found = true; } } if ( !found ) cout << "Nix gefunden" << endl;
-
it0101@loggedoff schrieb:
Ich glaub er meint das so:
Glaub ich auch. Und ich weiß auch nicht recht, was daran unklar war..?
-
So alles wunderbar geklappt.
DANKE!!!!Noch ne Frage:
Also die Daten sind wie folgt in der .txt Datei gespeichert
Name: hans
Wohnort: Hamburg
Alter: 34
Tele: 3435343Name: paul
Wohnort: muenchen
Alter: 12
Tele: 3434Name: hans
Wohnort: Kiel
Alter: 55
Tele: 3423445435Nun möchte ich gerne - soweit es geht - dass wenn z.b. in der Suche nach "Kie" suche der komplette "Block" angezeigt wird:
Name: hans
Wohnort: Kiel
Alter: 55
Tele: 3423445435Zurzeit zeigt er mir ja die Suchergebnise nur immer die aktuelle ganze Zeile an!
-
Nimm ne Klasse, überlad den op>> und dann ists nur noch ein find und fertig bist du...
bb