Alle Dateien in Verzeichnis als argv[]?



  • hi, ich hab schon stundenlang gesucht, aber nichts gefunden.

    ich habe ein programm das aus einer log-datei ein paar werte in eine csv-datei schreibt. da ich aber sehr viele log-files habe muss das ganze für jede *.log geschehen die in dem ordner sind.

    jetzt ist meine frage, ob jemand eine lösung dafür hat! wie ist egal, batch oder c/c++ 🙂

    weil ich weiß nicht wie das gehen soll wenn ich als argv[] ein *.log übergeb, weil er ja dann versucht die datei *.log zu öffnen und nicht packt



  • In Batch: for käme der Sache schon recht nahe (allerdings wird dein Programm für jede Datei neu aufgerufen).

    In C++ (WinAPI): Schau nach, ob Wildcards (* und ?) im übergebenen Dateinamen enthalten sind - wenn ja, kannst du FindFirstFile()/FindNextFile() anwerfen, um alle dazugehörigen Dateien aufzuspüren.



  • Unter Unix in der Shell eine for Schleife

    for i in `ls`; do echo §i; done

    Für echo $i dann dein Programm. $i enthält alles was Du mit
    ls selektiert hast.

    Unter Windows und keine cygwin,
    dann dir /w > bachtfile.bat

    In bachfile.bat stehen jetzt alle Dateien drin.
    Jetzt nimmt man einen Editor wie den XEmacs oder UltraEdit und kopiert
    mit der Spaltenfuntion den Namen des Programmes vor die Dateinamen.
    Dann das Bachtprogramm starten.

    Dein Programm muss aber ein Konsoleprogramm sein.



  • schonmal danke für die schnellen antworten.

    mein prog ist ein konsolenprogramm 😉

    for i in `ls`; do echo §i; done

    Für echo $i dann dein Programm

    -> wenn mein programm z.b. getdata heißt, müsste ich das dann so aufrufen?

    for i in `ls`; do getdata echo §i; done
    


  • ohne echo.

    echo $i gibt dir nur aus, was du selektiert hast.
    kannst auch echo $i; getData $i; done

    Dann sieht man auf der Konsole, welches Logfile gerde bearbeitet wird.

    Einfach mal ein wenig mit so einem Tip herumspielen und ein paar
    Dinge selber ausprobieren.

    Viel Spaß noch



  • habs jetzt doch in meinem c++ programm hinbekommen 🙂
    hab einfach eine batch, die am anfang mit

    dir /a /b *.log > _all.txt
    

    alle log-dateien in eine datei schreibt. diese laufe ich dann zeilenweise in meinem programm durch und öffne jedes mal die entsprechende datei und verarbeite sie...



  • jetzt brauch dein Programm aber immer eine Datei
    im bestimmten Format als Eingabe oder.

    Wenn der Dateiname die Eingabe ist, dann kann man das auch mal so
    aufrufen für eine Datei. Aber egal. Hautpsache es klappt.

    Übrigens die for Schleife geht nur in einer Unix/Linux Shell oder
    cygwin. Mit der Windowskonsole kann man das nicht machen.

    Viel Spaß noch



  • ja mein programm verarbeitet die datei _all.txt, die schon im richtigen format ist. ist zwar etwas umständlich, aber erfüllt seinen zweck 🙂

    das mit der for-schleife ist klar, vielleicht schreibe ich auch noch ein shell-skript um es zu testen.


Log in to reply