[c] Txt datei nach bestimmten vorher definierten wörtern durchsuchen

Blacksceada

Grünschnabel
Ich habe eine text datei in der untereinander manchmal auch nebeneinanger wörter stehen.
Ich würde nun gerne diese datei nach einem wort durch suchen und wenn es enthalten ist, möchte ich noch wissen wie oft.
Ich habe keine ahnung wie ich das realisieren soll.

kann die datei öffnen und so weiter aber genau die stelle wo ich suchen muss da habe ich keinen plan wie es weiter gehen soll.

Wäre euch echt dankbar wenn mir einer von euch mit einem tip helfen könnte evtl auch mit einem kleinen code schnipsel :-)

MfG
Blacksceada
 
Hallo,

Dann zeig doch mal den Code den du bis jetzt hast.
Der ist ja dann erweiterbar.

MfG Turri
 
den zeige ich dir gerne hoffe du steigst da durch^^
PHP:
#include <stdio.h>
#include <stdlib.h>

int funkauwa=0, again=0, x=5;
char suchbeg;

int main(void)
{
    system ("color f0");
    printf ("Die zu durchsuchende Datei muss im selben Verzeichniss liegen und liste.txt\nheissen.\n\n");
    system ("pause");
    system ("cls");

              FILE *liste;


              liste = fopen( "liste.txt", "r");


                         if(liste == NULL)
                         
                         {
                         puts("Fehler beim Oeffnen\n");
	                     exit(EXIT_FAILURE);
	                     }
	                     
                         else
	                     puts("erfolgreich geoeffnet!\n");
	                     
	    printf ("Bitte waehlen sie die Funktion des Programms aus:\n [1] nach Zeichen gruppen suchen.\n [2] nach ganzen woertern suchen\n [3] siehe 2 + einhaltung von gross und klein schreibung\n [4] Woerter zaehlen\n [5] Buchstaben zaehlen\n\nIhre Auswahl:\t");
	    scanf ("%d", &funkauwa);
        system ("cls");                                

/* Suchschleife */
                      again=1;                  
                      do 
                      {
                                                
                      printf ("\nSuchbegriff:\t");
                      scanf ("%d", &suchbeg);
                                                
                         /*auswahl umsetzung für die funktion -1- START*/                       
                         if (funkauwa=1);
                         {
                                           /* Endlosschleife */
                                           while (x<4)
                                           {      
                                           
                                           }
                         }
                         /*auswahl umsetzung für die funktion -1- ENDE*/
                         
                         /*auswahl umsetzung für die funktion -2- START*/                       
                         if (funkauwa=2);
                         {
                                           /* Endlosschleife */
                                           while (1)
                                           {    
                                                  
                                           char *Buffer;           // Dateiinhalt mit \0 am Ende
                                           long BufferSize;        // Dateigroesse
                                           char *Str = " suchbeg ";   // das ist die variable in der das suchwort gespeichert wird 
                                           char Ergebniss[100];    // platzhalter fur das "folgende Wort" das du brauchst
                                           char *p= strstr( Buffer, Str );     // finde den String
                                         
                                           if(!p)
                                        
                                           {
                                             printf ("Das gesuchte Wort wurde nicht im Text gefunden");// Wort nicht gefunden

                                             }
                                             
                                             p += strlen(Str);
                                                  // Zeiger p nach dem String setzen
                                             while(*p == ' ')p++;      // Mehrfach Leerzeichen vermeiden
                                           
                                              *(strchr(p, ' ')) = \0;  // setze ein \0 am Ende des gesuchten Worts
                                             strcpy(Ergebniss, p);     // Kopiere das gesuchte Wort 
                                           
                                           }
                         }
                         /*auswahl umsetzung für die funktion -2- ENDE*/
                         
                         /*auswahl umsetzung für die funktion -3- START*/                       
                         if (funkauwa=3);
                         {
                                           /* Endlosschleife */
                                           while (x<4)
                                           {      
                                           
                                           }
                         }
                         /*auswahl umsetzung für die funktion -3- ENDE*/
                         
                         /*auswahl umsetzung für die funktion -4- START*/                       
                         if (funkauwa=4);
                         {
                                           /* Endlosschleife */
                                           while (x<4)
                                           {      
                                           
                                           }
                         }
                         /*auswahl umsetzung für die funktion -4- ENDE*/
                         
                         /*auswahl umsetzung für die funktion -5- START*/                       
                         if (funkauwa=5);
                         {
                                           /* Endlosschleife */
                                           while (x<4)
                                           {      
                                           
                                           }
                         }
                         /*auswahl umsetzung für die funktion -5- ENDE*/
                         
                         if (funkauwa>=6);
                         {
                             system ("color c0");
                             printf ("ERROR: Es gibt nur die Funktionen von 1-5.\n Aufgrund einer Fehleingabe wird das Programm beendet.\n");
                             break;
                         }       
                              
                      printf ("\n\nErneute Suche? [Ja=1] [Nein=2]");
                      scanf ("%d", &again);

                      }

while (again==1);

 /* Datei wieder schließen */
 fclose(liste);
 
 system ("pause");
 
 return 0;
 
}

Viel spaß damit. Hoffe das meine Versuche verständlich sind.
 
Hi.

Je nach Aufgabe würde ich wortweise oder zeilenweise einlesen.

Wortweise Einlesen geht so:
C:
char wort[100];

while (fscanf(datei, "%99s", wort) == 1) {
  /* ... */
}
Zeilenweise Einlesen funktioniert mit fgets:
C:
char zeile[1000];

while (fgets(zeile, sizeof(zeile) / sizeof(*zeile), datei) != NULL) {
  /* ... */
}

Wenn du die Datei wiederholt abarbeiten willst, mußt du an den Dateianfang zurückkehren:
C:
fseek(datei, SEEK_SET, 0);

Vergleichen kannst du die Strings mit strcasecmp bzw. strcmp.

Substrings suchen mit strstr:
C:
char* p = zeile;
int anzahl = 0;

while ((p = strstr(p, suchwort)) != NULL) anzahl++;

Gruß
 
Na da danke ich dir aber mal für deine schnelle und so präzise Hilfe.
Auch ein Danke an Turri.

Habt mir sehr geholfen werde das jetzt gleich fertig machen . :-)

\\EDIT: Habe das nun einmal probiert einzu bauen bekomme aber bei code 1 bekomme ich nen fehler schon bevor ich ihn compiliert habe.
PHP:
char wort[100];
while (fscanf(datei, "%99s", wort) == 1) {<-----da irgendwo ist angeblich der fehler.*
/* ... */ <------was kommt da hin? :confused: 
}

Und was bringt eigentlich das %99s muss ich das durch die variable ersetzen nach der ich in der datei suchen möchte?


*Unbenannt1.c `datei' undeclared (first use in this function)
 
Zuletzt bearbeitet:
An Stelle von 'datei' kommt natürlich das Dateihandle der geöffneten Datei, in deinem Fall also 'liste'. Selber denken schadet übrigens nicht.

Das %99 ist eine Formatierungsanweisung (steht in der Beschreibung von fscanf) und bedeutet, daß Wörter bis zu einer Länge von 99 Zeichen eingelesen werden (mit der 0 am Ende sind es dann 100, die Größe des Arrays). Das s dahinter bedeutet, daß ein String eingelesen werden soll, als Parameter also ein Zeiger auf char erwartet wird.
 
Zurück