Problem mit der Verknüpfung 2er Funktionen



  • Mit Vektoren kenn ich mich noch nicht so gut aus, ich bastel aber mal ein bisschen rum und schau ob ichs vielleicht hinbekomm...
    Trotzdem vielen Dank für die schnelle Hilfe.

    Könntest du mir vielleicht zeigen wie du die readline Funktion in die erste Funktion integrieren würdest, v.a. in Bezug auf die zu übergebenden Parameter?



  • Hat vielleicht irgendjemand ein Code Beispiel für mich. Ich bin leider nicht weitergekommen.
    Vielen Dank schonmal.



  • Wenn du die readline()-Funktion direkt einbauen willst, kannst du die cout<<... Zeile einfach ersetzen durch

    string line;
    if(readline(wfd.cFileName,line);
    {
      ...//mach was mit der eingelesenen Zeile
    }
    

    der allgemeinere Ansatz sieht etwa so aus:

    void dirsearch(const string& path, const string& folder, const string& filter, vector<string>& namelist) 
    { 
      HANDLE hFindFile; 
      WIN32_FIND_DATA wfd; 
    
      string buf = path + folder + filter;
      cout << "Es wird gesucht nach: " << buf << endl << endl;
      hFindFile = FindFirstFile(buf.c_str(), &wfd);   
      if (hFindFile != INVALID_HANDLE_VALUE) 
      { 
        do
        {
          if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) 
          { 
             namelist.push_back(wfd,cFileName);
          }
        }while(FindNextFile(hFindFile, &wfd) != 0); 
        FindClose(hFindFile); 
      } 
    }
    
    ...
    vector<string> files;
    dirsearch(root,"\\beispiel","\\test*.xyz",files);
    for(vector<string>::iterator p=files.begin();p!=files.end();++p)
    {
      string zeile;
      if(read_line(*p,zeile))
        ...//mach was
    }
    


  • Vielen Dank CStoll.
    ich hab mich jetzt für die "einfachere" Lösung entschieden, da beim experimentieren mit dem vector nix gescheites rausgekommen ist. Der Code lässt sich auch ohne Probs compilieren...
    Aber: leider öffnet er mir jetzt nicht mehr meine Dateien bzw. springt mir in der read_line Funktion bei der ersten Fehlerabfrage raus 😞
    Liegt wohl an den Parametern, aber ich finde einfach nicht den richtigen Typ, damit mir die Funktion True zurückliefert 😕
    Hier der angepasste Code:

    //Prototypen
    void dirsearch(char[], const string&, const string&);
    bool read_line(string, string&);
    ...
    //Aufruf in main
    char root[MAX_PATH];
    ...
    dirsearch(root, "\\Beispiel", "\\test*.txt");
    ...
    //angepasste Funktionen
    void dirsearch(char path[MAX_PATH], const string& folder, const string& filter) 
    { 
      HANDLE hFindFile; 
      WIN32_FIND_DATA wfd; 
      string buf; 
      string line;
    ...
    if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) 
    { 
      if(read_line(wfd.cFileName,line) == 0) 
        {	
         cout << "An error occured reading" <<wfd.cFileName << endl;
        }
      else
        {
         cout << "lässt sich oeffnen" << endl;
        }			 
    }
    
    bool read_line(string filename, string& line)  // <--hier liegt mein Problem, 
    { 
      ifstream file_stream; 
      file_stream.open(filename.c_str(), ios::in); // ...denn das scheitert
    
        if (file_stream.is_open() == false)				
        { 
          cout << "oeffnen der Datei ist gescheitert\n";
          return false; 
        }
    ...
        else
          return true;
    

    Wär super wenn mir nochmal geholfen werden könnte 🙂



  • So habs jetzt alleine hinbekommen, zwar nicht gerade elegant(mit bösen globalen Variablen 😉 ) aber egal, Hauptsache es funzt.
    Ich wär trotzdem nicht böse, wenn mir noch einer einen eleganteren Weg sagen/posten könnte.
    Danke nochmal an Dich CStoll



  • ITAzubi23 schrieb:

    Ich wär trotzdem nicht böse, wenn mir noch einer einen eleganteren Weg sagen/posten könnte.

    Schau mal ein Stück nach oben - der Code in meinem letzten Beitrag IST der elegantere Weg 😉



  • Mag sein, aber da gibt mir der Compiler 18 Fehler aus 😉
    Da müsstest du einem Noob wie mir schon noch ein bissel mehr erklären (welche defines, includes etc.) um das zum laufen zu bekommen...



  • ITAzubi23 schrieb:

    Mag sein, aber da gibt mir der Compiler 18 Fehler aus 😉

    Wird das jetzt zu einem lustigen Ratespiel ala "was könnte dem Compiler Probleme bereiten"? Wenn du Hilfe erwartest, mußt du die Fehlermeldungen schon angeben.

    Da müsstest du einem Noob wie mir schon noch ein bissel mehr erklären (welche defines, includes etc.) um das zum laufen zu bekommen...

    Du brauchst die Header <string> (für std::string) und <vector> (für std::vector<>) und eventuell die passenden using-Direktiven, wenn du zu faul bist, vor alle Bezeichner std:: zu schreiben.



  • Ich hab mir schon gedacht, dass der Spruch mit dem Ratespiel kommt 😉
    Aber du hast mir die Antwort trotzdem geliefert, ich hab <vector> nicht inkludiert, ich versuch jetzt mal mein Programm umzubauen und meld mich nochmal bei Problemen. Danke nochmal.
    Bis dann.



  • Uff-geschafft-läuft 👍
    Hattest Recht ist eleganter, ich danke dir für deine super Hilfe.
    Bis zum nächsten Mal 😉



  • ITAzubi23 schrieb:

    Ich hab mir schon gedacht, dass der Spruch mit dem Ratespiel kommt 😉

    Ja, der Spruch mit der Kristallkugel wirkt nicht mehr 😃


Anmelden zum Antworten