Stream nach String durchsuchen (Teilprogrammcode vorhanden)



  • Hallo,

    ich hoffe ihr könnt mir helfen!
    In meinen unteren Programmcode soll wird eine spezielle datei (.txt) in einem ordner geöffnet diese (.txt) soll nach spezielle strings durchsucht werden! Aber das mit dem strings durchsuchen kriege ich nicht hin. Ich kann nur nach einem zeichen suchen! Hat jemand einen idee?

    strcpy(variable2,variable);// variable  = c:\\Programme\\Text
        strcat(variable2, "\\"); // variable 2 = c:\\Programme\\Text\\
    
        strcpy(variable4,variable2);//variable 4 = c:\\Programme\\Text\\
        strcat(variable, "\\*");// variable = c:\\Programme\\Text\\*
    
        fHandle=FindFirstFile(variable,&wfd); //(.) finde erste datei in c:\\Programme\\Text\\*
        FindNextFile(fHandle,&wfd);//..
    
        while (FindNextFile(fHandle,&wfd))// gehe das verzeichnis c:\\Programme\\Text\\* durch 
        {
            if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                //nochmal für unterverzeichnisse!
            }
            else 
            {
                strcat(variable2,wfd.cFileName);// hier wird an c:\\Programme\\Text\\ das Test.txt rangehängt
                result = search(variable2);// c:\\Programme\\Text\\Test.txt wird überprüft ob die datei mit .txt endet 
                if(result){//-> wenn JA 
    
                    strcat(variable4,wfd.cFileName);//speichere in variable4 den pfad ab c:\\Programme\\Text\\Test.txt
                    quelle = fopen(variable4,"rb");//öffne die Datei
    
                    if(quelle == NULL){
                        //MESSAGEBOX ERROR DAT KONNTE NICHT GELESEN WERDEN
                            return 0;
                    }else{
                        ziel = fopen("D:\\Test.txt","w+b");//öffne die Datei Test.txt in D!!!!
                        if(ziel ==NULL){
                            //MESSAGEBOX ERROR DAT KONNTE NICHT ERSTELLT WERDEN
                            return 0;
                        }else{
                            while((c=getc(quelle))!=EOF){
                                 //putc(c,ziel);<-- schreibe den inhalt von C:\\... \\Test.txt nach D:\\.....\\Test.txt
                                //--->HIER IST DAS PROBLEM!!!!<----- ZEICHENWEISES DRUCHLESEN DES STREAMS BRAUCHE ABER STRING -> wie z.b. :
                                // "Maus", "verstanden", "test"
                                }
                        }
                    }
                }
                continue;
            }                                                                                                   //und beenden des Skripts.
                                                                                                                            //
        return 0;
    
    }
    


  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum C (C89 und C99) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Wenn du nun auch noch verrätst, was du im Falle gefundener Strings damit machen willst, wäre eine Hilfe konstruktiver als jetziges Stochern im Nebel.
    Ich schlage vor, du kapselst mal deine gewünschte Funktionalität in einer Funktion und rufst diese dann an der entsprechenden Stelle mit nötigen Parametern auf. Das kommt der Struktur deines Programms entgegen.



  • Erstmal: Das Einlesen des Verzeichnisses ist fehlerhaft, bspw. werden die ersten Dateien überlesen.

    fHandle=FindFirstFile(variable,&wfd);
    if(fHandle!=INVALID_HANDLE_VALUE)
    {
      do
      {
        // hier auswerten
      } while (FindNextFile(fHandle,&wfd));
      FindClose(fHandle); // !!
    }
    

    Falls bei der Suche keine Joker wie '*' oder keine anderen Ausdrücke wie '|' verwendet werden sollen, kann bspw. solange aus der Datei eingelesen werden, bis der erste Buchstabe des Filters gefunden wurde. Anschließend können in einer Schleife die restlichen Buchstaben des Suchbegriffs mit dem folgenden Dateiinhalt verglichen werden, sollte es nicht passen, wird die Schleife abgebrochen.
    Aufpassen muss man nur, dass der Buchstabe der letzten Abfrage gespeichert wird, da es ja wiederum der Erste sein könnte, der überprüft werden muss.



  • danke für den Hinweis!

    Entschuldige das ich nicht erwähnt hätte was zurück gegeben werden soll!
    Am besten soll herausgegeben werden ob der string in dem stream gefunden wurde oder nicht.

    also ein bool oder ein int wäre nicht schlecht!



  • Schau dir mal strstr an


Anmelden zum Antworten