Thorsten: C++ (fscanf)

Gruss am Morgen

gibt es einen C++ Kenner hier im Forum. Ich habe aus einem File das ca.
so aufgebaut war,

Date Wert1 Wert2 ...
1.99 34537 65778 ...
2.99 57678 78699 ...

check = 1;
   for (i=0;;i++) {
    check=fscanf(sf,"%s", string);
      if (check==EOF) break;
      if ((i%(NumOfColumns+1))==0) {
       GetDate (string, Frequency, Date);...

die Werte (FELDER einzeln) als strings ausgelesen. Jetzt hab ich ein neues File

Date;Wert1;Wert2;...
1.99;45776;76887;...
2.99;65858986;98797;...

Wie kann ich das Programm schreiben, das es nicht die Leerzeichen als Ende bzw.
Anfang der strings erkennt, sondern die ";" SEMIKOLONS.

Danke und Gruß aus dem Schwabenlande

Thorsten

  1. Hallo Thorsten,

    gibt es einen C++ Kenner hier im Forum.

    Hm, kenn mich eigentlich nicht besonders mit aus, kann es aber mal probieren.

    Anfang der strings erkennt, sondern die ";" SEMIKOLONS.

    Ich denke, Du musst Dir eine Funktion selber schreiben, die Zeichenweise in einer Schleife einliest, bis das Zeichen das Semikolon ist. Im übrigen verwendet man meines Wissens in C++ bevorzugt diese Stream Bibliotheken (fstream), das fscanf war in C üblich.

    Gruss

    Marko

  2. Grüssi!

    Date;Wert1;Wert2;...
    1.99;45776;76887;...
    2.99;65858986;98797;...

    Wie kann ich das Programm schreiben, das es nicht die Leerzeichen als Ende bzw.
    Anfang der strings erkennt, sondern die ";" SEMIKOLONS.

    Du kannst die Datei zeilenweise einlesen (fgets) und dann bei ';' splitten (strtok):

    FGETS:
    while (fgets(line,sizeof(line),sf) != NULL) { [...] }
    http://www.cplusplus.com/ref/cstdio/fgets.html

    STRTOK:
    for (p=strtok(line, SEPERATORS); p!=NULL; p=strtok(NULL,SEPERATORS)) { [...] }
    http://www.cplusplus.com/ref/cstring/strtok.html

    Da C++ schon ein paar Jährchen zurückliegt kann ich nix garantieren, und C liegt noch einige Jährchen mehr zurück ;-) Und da ich weder C noch C++ Compiler habe, hab ich es in php ausprobiert ;-)

    <?

    $string = "This;is;an;example;string";
    $tok = strtok ($string,";");
    // Hier wird der String gesplittet in "This" und "is;an;example;string"
    while ($tok) { // solange es ein $tok gibt das != NULL ist
        echo "Word=$tok<br>";  // beim ersten durchlauf: "This"
        $tok = strtok (";");   // 1. Durchlauf: "is;an;example;string" wird gesplittet
                               // in "is" und "is;an;example;string"
                               // Beim 2. DL wird "is" ausgegeben, und der String weiter gesplittet
    }
    ?>

    In C/C++ gehts genauso. Wichtig ist nur, dass zweimal gesplittet wird!

    lg bernhard

  3. Hallo Thorsten,

    Zeilenweise aus einer Datei lesen und das Semikolon als Begrenzer einsetzen ?

    istream& getline( signed char* psch, int nCount, char delim = '\n' );
    ---------------------------------------------------------------^^

    Den Rest kriegst Du allein hin.
    Setze ifstream ein (erbt von istream die Methode).
    Vergiß das "FILE". Da hat sich schon einiges getan ;)

    ifstream myFile;
    myFile.open(...);
    ...

    viele Grüße
    stw