Anfänger braucht Hilfe. Nach mehreren Worten//Variablen suchen?
-
Hallo Leute,
habe vor ein paar Tagen mit c++ angefangen und komme einfach nicht weiter.
Habe schon stunden mit lesen verbracht und ich kann es einfach nicht lösen.Mein Problem ist dass ich nach mehreren Worten//Variablen suchen lassen will.
Aber wie?Bin fuer jede Antwort dankbar.
#include <iostream> #include <fstream> #include <stdexcept> #include <string.h> using namespace std; int main (void) { char line[256]; ifstream infile ("IKA_ANF.anf", ios::in); if (!infile) { cout << "No File :-(" << endl; return 1; } while (infile.getline (line, 256)) { // zeilen ausgeben cout << line << endl; // zeilen durchsuchen char suche[512] = "Sven"; [b]// Hier brauche ich mehrere Worte/Variablen[/b] char *pos; pos = strstr(line, suche); if(pos) { printf("Match at %d. in Array.", pos-line+1); //cout << pos-line << endl; string found; found=line; cout << found << endl; } else { printf("Nothing found!"); } } cout << endl; return 0; }
-
1. Bitte cpp und keine code Tags benutzen.
2. Bitte richtig einrücken.
3. Die Frage war was? Was hindert dich denn daran einfach nach noch einem Wort zu suchen?
4. Das ist.. offen gesagt.. schreckliches C++. Bis auf die Streams ist das C.
-
printf("Match at %d. in Array.", pos-line+1);So geht das nicht. Die strstr()-Funktion gibt keinen double-Wert sondern einen zeiger auch char zurück.
string found; found=line; cout << found << endl;hier gilt:
found == line, d.h. line hast du gar nicht verändert.
-
Abgesehen davon, dass man über deine Methode, einen String zu suchen streiten kann (die ist im Moment noch fehlerhaft, außerdem gäbe es hier z.B. durchaus komfortable Möglichkeiten mit der Klasse std::string):
Wenn du eine Methode entwickelt hast, um nach einem String zu suchen, dann pack sie doch einfach in eine Funktion und rufe diese mehrfach (für jeden Suchstring) auf.
-
_matze schrieb:
Abgesehen davon, dass man über deine Methode, einen String zu suchen streiten kann (die ist im Moment noch fehlerhaft, außerdem gäbe es hier z.B. durchaus komfortable Möglichkeiten mit der Klasse std::string):
Dass ist meine erster Code den ich schreibe.
Wenn du eine Methode entwickelt hast, um nach einem String zu suchen, dann pack sie doch einfach in eine Funktion und rufe diese mehrfach (für jeden Suchstring) auf.
Gibt es da keine Muster oder wo ich mehr Informationen erhalte?
-
[Rewind] schrieb:
printf("Match at %d. in Array.", pos-line+1);So geht das nicht. Die strstr()-Funktion gibt keinen double-Wert sondern einen zeiger auch char zurück.
Oh je. Dass muss ich erst nachschlagen.

string found; found=line; cout << found << endl;hier gilt:
found == line, d.h. line hast du gar nicht verändert.Danke fuer den Hinweis.
-
cooky451 schrieb:
1. Bitte cpp und keine code Tags benutzen.
2. Bitte richtig einrücken.
3. Die Frage war was? Was hindert dich denn daran einfach nach noch einem Wort zu suchen?
4. Das ist.. offen gesagt.. schreckliches C++. Bis auf die Streams ist das C.1. OK mache ich
2. OK ich probiers
3. Weil ich es einfach nicht weiss wie?
4. Bin Anfänger - Aber gut zu wissen.
-
picknick schrieb:
_matze schrieb:
Abgesehen davon, dass man über deine Methode, einen String zu suchen streiten kann (die ist im Moment noch fehlerhaft, außerdem gäbe es hier z.B. durchaus komfortable Möglichkeiten mit der Klasse std::string):
Dass ist meine erster Code den ich schreibe.
Wenn du eine Methode entwickelt hast, um nach einem String zu suchen, dann pack sie doch einfach in eine Funktion und rufe diese mehrfach (für jeden Suchstring) auf.
Gibt es da keine Muster oder wo ich mehr Informationen erhalte?
Es gibt zum Beispiel std::string::find. Schau mal hier:
http://www.cplusplus.com/reference/string/string/find/
Wie sieht's denn mit Funktionen aus. Hast du schon mal eine Funktion geschrieben? Weißt du so halbwegs, wie das mit den Parametern und der Rückgabe funktioniert?
-
_matze schrieb:
picknick schrieb:
_matze schrieb:
Abgesehen davon, dass man über deine Methode, einen String zu suchen streiten kann (die ist im Moment noch fehlerhaft, außerdem gäbe es hier z.B. durchaus komfortable Möglichkeiten mit der Klasse std::string):
Dass ist meine erster Code den ich schreibe.
Wenn du eine Methode entwickelt hast, um nach einem String zu suchen, dann pack sie doch einfach in eine Funktion und rufe diese mehrfach (für jeden Suchstring) auf.
Gibt es da keine Muster oder wo ich mehr Informationen erhalte?
Es gibt zum Beispiel std::string::find. Schau mal hier:
http://www.cplusplus.com/reference/string/string/find/
Wie sieht's denn mit Funktionen aus. Hast du schon mal eine Funktion geschrieben? Weißt du so halbwegs, wie das mit den Parametern und der Rückgabe funktioniert?
Alles nicht so einfach...
Habe Funktionen schon "geübt" aber ich kann sie nicht auf mein jetziges Problem anwenden.Dass wird was...
-
picknick schrieb:
Alles nicht so einfach...
Habe Funktionen schon "geübt" aber ich kann sie nicht auf mein jetziges Problem anwenden.Dass wird was...
Eins nach dem anderen.
Mach erst mal das Speichern deines Dateiinhalts in std::string und das Suchen eines Strings darin. Dann kannst du ja noch mal den aktuellen Source posten und wir sehen weiter.
-
_matze schrieb:
picknick schrieb:
Alles nicht so einfach...
Habe Funktionen schon "geübt" aber ich kann sie nicht auf mein jetziges Problem anwenden.Dass wird was...
Eins nach dem anderen.
Mach erst mal das Speichern deines Dateiinhalts in std::string und das Suchen eines Strings darin. Dann kannst du ja noch mal den aktuellen Source posten und wir sehen weiter.Danke, du machst mir Hoffnung. Also gut. || cout <<"Auf ein Neues!"<< endl;
Ich hoffe dass ist nicht voellig daneben?
Nun kann ich auf alle Tabellenfelder zugreifen..
Allerdings ist mir dass noch nicht klar mit der Suchfunktion.#include <iostream> #include <fstream> #include <string> using namespace std; int main() { ifstream dat_ein; string dateiname = ("IKA_ANF.ANF"); // Dateidatenbank // Datenbankdatei oeffnen dat_ein.open(dateiname.c_str(), ios_base::in); if(!dat_ein) { cout << "Datei konnte nicht geoeffnet werden!"; cout << endl; return -1; } string doc_nr; // Dokumentenkennzeichen string loop; dat_ein >> doc_nr; // Dokumentkennzeichen lesen in 1. Zeile cout << doc_nr << endl; // Keine ahnung wie ich dass hingekriegt habe // Felder definieren string feld1, feld2, feld3, feld4, feld5, feld6, feld7, feld8, feld9;// Felder aus DB // Felder aus Datensatz einlesen while(!dat_ein.eof()) { dat_ein >>feld1>>feld2>>feld3>>feld4>>feld5>>feld6>>feld7>>feld8>>feld9; cout <<feld1<<feld2<<feld3<<feld4<<feld5<<feld6<<feld7<<feld8<<feld9<< endl; // feld9 auf Gleichheit ueberpruefen if(feld9 == "I201102205430") // An dieser Stelle brauche ich jedoch mehrere // Vergleichsoperatoren die aus einer *.CSV ausgelesen // werden { cout << "Treffer" << endl; // Die betr. Zeilen sollen dann alle in eine output.anf } } //Dateidatenbank schliessen dat_ein.close(); //CSV Datei zum verleich einlesen // .... return 0; }Freue mich ueber jede Hilfe.