Werte aus einer Textdatei auslesen



  • Hallo,

    ich hoffe ihr könnt mir helfen. Ich möchte Werte aus einer Textdatei auslesen, die folgendermaßen aufgebaut ist:

    LfdNr Bezeichnung Wert
    1 Zahl 1 15
    2 Zahl 3 35
    3 Zahl 1 40
    4 Zahl 2 17

    Ich möchte nun, die Werte für Zahl 1 (15 und 40) summieren, wie komme ich zu den Werten. Wie muß ich die Datei auslesen?
    Ich bin für jede Hilfe dankbar, da ich noch Anfänger bin.
    Danke im Voraus....

    Grüsse

    Mirko



  • Du kannst die Datei zeilenweise einlesen und dann jede Zeile einzeln auswerten.
    Dazu zerlegst Du die Zeile mit strtok.



  • fopen() und fscanf() könnte auch helfen.



  • Danke schon mal...
    Habt ihr vielleicht mal ein Codebeispiel für mich?
    Das wäre echt gut.

    Gruß

    Mirko



  • /* FSCANF.C: This program writes formatted
     * data to a file. It then uses fscanf to
     * read the various data back from the file.
     */
    
    #include <stdio.h>
    
    FILE *stream;
    
    void main( void )
    {
       long l;
       float fp;
       char s[81];
       char c;
    
       stream = fopen( "fscanf.out", "w+" );
       if( stream == NULL )
          printf( "The file fscanf.out was not opened\n" );
       else
       {
          fprintf( stream, "%s %ld %f%c", "a-string", 
                   65000, 3.14159, 'x' );
    
          /* Set pointer to beginning of file: */
          fseek( stream, 0L, SEEK_SET );
    
          /* Read data back from file: */
          fscanf( stream, "%s", s );
          fscanf( stream, "%ld", &l );
    
          fscanf( stream, "%f", &fp );
          fscanf( stream, "%c", &c );
    
          /* Output data read: */
          printf( "%s\n", s );
          printf( "%ld\n", l );
          printf( "%f\n", fp );
          printf( "%c\n", c );
    
          fclose( stream );
       }
    }
    
    Output
    
    a-string
    65000
    3.141590
    x
    

    Das geht aber nur gut, wenn deine Zeilen immer das gleiche Format haben,
    ansonsten musst du mit strtok rumwursteln.



  • Ist jetzt aber nicht gerade C++ Like. Ich würds eher so machen:

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main()
    {
            ifstream file("zahlen.txt");
    
            string Line;
            size_t pos;
            int zahl,summe = 0;
    
            while(getline(file, Line))
            {
                    pos = Line.find_first_of(' ');
                    zahl = atoi(Line.substr(0,pos).c_str());
                    summe+=zahl;
            }
            cout << "Gesamt: " << summe << endl;
    }
    

    Außerdem ist void main()...naja, du weisst schon 😃



  • Guten Tag,
    Die Datei Zeilen weise in einen Vektor eizulesen wäre besser,
    ➡ Ströme und Dateien in C++
    (Hume Sikkins in der FAQ http://www.c-plusplus.net/forum/viewtopic.php?t=39469 )

    MfG Max



  • Hallo,
    vielen Dank für die gute Hilfe.
    Damit habt ihr mir echt weitergeholfen.
    Was bedeutet die Funktion "atoi"?
    Weleche Stelle im Quellcode ist dafür verantwortlich, daß meine Überschriften (LfdNr, Werte...) ignoriert werden?
    Bei der Berechung fängt er doch ab der zweiten Zeile an, oder?

    Danke und Gruß

    Mirko



  • atoi(..) wandelt ein string in eine Zahl um



  • Convert strings to double (atof), integer (atoi, _atoi64), or long (atol).

    Each function returns the double, int, __int64 or long value produced by interpreting the input characters as a number.



  • mirkod schrieb:

    Weleche Stelle im Quellcode ist dafür verantwortlich, daß meine Überschriften (LfdNr, Werte...) ignoriert werden?

    MSDN Library schrieb:

    The return value is 0 (for atoi and _atoi64), 0L (for atol), or 0.0 (for atof) if the input cannot be converted to a value of that type.

    Kann also einfach mit durchlaufen werden.



  • Okay, vielen Dank an euch alle für die die gute und schnelle Hilfe.

    Gruß

    Mirko


Anmelden zum Antworten