Textdatei mit fgets auslesen und Inhalt vergleichen
-
Hallo Leute.Sagt mal ich hab da ne Funktion mit fgets geschrieben, die aus meiner Textdatei den Inhalt zeilenweise ausliest und ausgibt.Ist es möglich, das man den Inhalt einer Zeiler nach einzelnen Schlüsselwörtern durchsucht? Der Inhalt in meiner Textdatei ist nicht durch irgendwelche Trennzeichen getrennt.Ich dachte mir das so, das jede Zeile einzeln ausgelesen wird und er mit strcmp vergleicht, ob das gesucht Wort da ist.Falls ja, soll er diese Zeile ausgeben.Hier ist mein Code.Bin schon fast am verzweifeln
#include <iostream.h> #include <conio.h> #include <iomanip.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <fstream.h> #define DATEINAME "ATIME.txt" #define PUFFER_GROESSE 1024 void read() { char textpuffer [PUFFER_GROESSE]; FILE *fp; char *s; if ((fp = fopen (DATEINAME, "r")) == NULL) { printf ("Datei existiert nicht oder kein Zugriff möglich!\n"); } while ((s = fgets (textpuffer, sizeof (textpuffer) - 1, fp)) != NULL) { cout<<s; getch(); } fclose (fp); }
-
dein problem läßt sich leicht mit hilfe der ansi-c-standardbibliothek lösen. dort gibt es eine funtion strstr(), mit der du prüfen kannst, ob ein string in einem anderen enthalten ist.
strstr(s1,s2) gibt, falls s2 in s1 enthalten ist, den zeiger auf das erste zeichen von s2 in s1 zurück. ist s2 nicht in s1 enthalten, dann ist der rückgabewert NULL.
#include<iostream> #include<iomanip> #include<cstring> #include<cstdio> #include<cstdlib> #include<fstream> using namespace std; #define DATEINAME "ATIME.txt" #define PUFFER_GROESSE 1024 void read() { char textpuffer [PUFFER_GROESSE]; FILE *fp; if((fp=fopen(DATEINAME,"r"))==NULL) { cout<<"Datei existiert nicht oder kein Zugriff möglich!"<<endl; exit(EXIT_FAILURE); } while(fgets(textpuffer,sizeof(textpuffer),fp)) { if(strstr(textpuffer,"schluesselwort")) cout<<textpuffer; cin.get(); } fclose (fp); }
das "-1" hinter sizeof bauchst du nicht. das zweite argument von fgets() bezeichnet die puffergröße und nicht die maximale zeilenlänge. das abschließende nul-byte ist da schon mit drin.
du solltest stdin/stdout und cin/cout nicht gemischt verwenden. das kann subtile probleme geben.
du solltest anstelle von #include <iostream.h> besser #include<iostream> setzen. die ".h" versionen sind veraltet und werden nicht mehr von jedem compiler unterstützt. außerdem kann es auch da subtile probleme geben. das gilt auch für alle anderen c++-standard-header. und anstelle von #include <stdio.h> solltest du #include<cstdio> verwenden. wenn du die alte c-stdandardbibliothek auch in c++ verwenden willst, dann kannst du das machen. du solltest aber die neuen header-versionen benutzen. deren name lautet genauso wie die c++-version nur ohne ".h" am ende und dafür mit "c" am anfang.
wenn du die neuen header-versionen verwendest, mußt du aber unbedingt ein using namespace std; hinter die includes setzten. sonst bekommst du beim kompilieren fehlermeldungen.
deine verwendung von fgets() war etwas umständlich.
-
Hey vielen Dank, hat mir sehr geholfen.Werde meinen Code auch gleich ändern,Danke für die Hinweise.Endlich komm ich weiter,Juhu!
-
hab meinen beitrag editiert. ich hielt es für nötig, an deinem code nochmal gewaltig den rotstift anzusetzten