1. Einlesen einer .txt ab 3.Zeile , 2. Automatismus fürs Einlesen vieler .txt gesucht



  • Hallo liebe Leute,

    ich hoffe mal, ihr könnt mir zu meinen 2 Fragen weiterhelfen.
    Vielen Dank schon mal im voraus von einem, der sich noch nicht wirklich mit C++ beschäftigt hat, aber es jetzt schnell können muss.
    Also:

    1. Ich muss beim Einlesen einer txt-Datei auf 3 verschiede Werte in 3 Spalten zurückgreifen, was bei mir eigentlich klappt, jedoch nur, wenn ich keine Kopfzeilen habe. Was kann ich einfügen, damit erst ab der 3.Zeile gelesen wird?

    2. In dem Programm werden 2 txt-Dateien bearbeitet. Allerdings darf ich demnächst mehrere hundert bzw. tausend bearbeiten, was eine Auflistung unmöglich macht. Ich bräuchte eine Funktion, die automatisch viele Dateien (die nach dem Muster "Sha" + Datums- und Uhrzeitangabe gespeichert sind) hintereinander liest und nebenbei auch noch erkennt welche Uhrzeiten existieren und welche nicht (im Beispiel unten 28.11.1991 8:01 und 8:06).

    Hier mal die txt-file:

    1381 lines
    Azim. Range Inten
    15.7 108.5 1.00
    17.1 99.5 2.00
    17.1 119.5 3.00
    usw.

    ..................................
    und das cpp:

    #include <stdio.h>

    const int filenumb = 2;
    float azimuth;
    float range;
    float intensity;

    void main()
    {
    FILE *fi,*fi1;
    int ji,i,count;

    char * radinfile[filenumb] =
    {"Sha199111280801.txt",
    "Sha199111280806.txt"};

    char * radoutput[filenumb] =
    {"199111280801.txt",
    "199111280806.txt"};

    for (ji=0 ; ji<filenumb; ji++)
    { fi = fopen (radinfile[ji],"rb");
    fi1 = fopen(radoutput[ji], "w");

    for (i=1 ; i<1381 ; i++) //1381 entsprechend der Zeilen in der .txt)
    { fscanf(fi,"%f %f %f",&azimuth,&range,&intensity);

    fprintf(fi1,"%f", azimuth);
    fprintf(fi1, ",azimuth");
    fprintf(fi1,"\n");

    fprintf(fi1,"%f", range);
    fprintf(fi1, ",range");
    fprintf(fi1,"\n");

    fprintf(fi1,"%f", intensity);
    fprintf(fi1, ",PI");
    fprintf(fi1,"\n");
    }

    fclose(fi);
    }
    }

    Ich macht mich glücklich, wenn ihr mir helfen könnt.
    Grüsse
    Chris



  • Setz doch bitte Codetags, damit man den Code besser lesen kann.
    Wie mir scheint, nutzt du sehr viele C-Funktionen(und keine aus dem C++ Standard), da bist du hier im falschen Forum.

    void main()
    

    ist übrigens falsch, richtig ist:

    int main()
    

    Wenn du die dritte Zeile einlesen musst, könntest du mit getline (siehe dazu www.cppreference.com und die FAQ) zwei Zeilen einfach einlesen und verwerfen.



  • meiner meinung sind für solche sachen script sprachen wie perl/python besser geeignet als c++
    wenn's denoch c++ sein muss wirst du für das automatisierte lesen vieler txt dateien in einem ordner(/unterordner?!) winapi brauchen, für ein schema lala-datum-uhrzeit würden sich regexp gut eignen, sind aber auch nicht zwingen erforderlich für regexp in c++ würde ich die boost lib verwenden (hab da aber selber noch nicht so viel erfahrung damit)

    ab 3. zeile einlesen?!
    entweder so in der art

    for(size_z i=0; i<3;++i)
       txtStream = txtStream.find("\n");
    

    oder 3 mal getline, wenn jede zeile 3 float werte hat könntest du natürlich die lesepostion des streams auch einfach 9 float's weiterschieben - dafür gibts viele methoden

    mfg, stefan b


Anmelden zum Antworten