Datei auslesen von ... bis ..., im Array speichern und Werte ausgeben



  • Hallo liebe C-Gemeinde,
    ich habe ein Problem. Und zwar habe ich eine externe Datei und soll nun ein Programm schreiben, welches die Datei abschnittsweise ausließt und auswertet. In der Datei sind mehrere Datensätze mit bis zu 1000 Werten jeweils durch ein Wort getrennt. Nun möchte ich die Datensätze einzeln einlesen und herausfinden, wie viele Werte nun wirklich in dem Datensatz sind.

    Hier ist mein bisher ziemlich magerer Ansatz zum einspeichern eines Datensatzes, der jedoch auch nicht funktioniert:...

    float array [1001];
    int j=0, i=1;
    FILE *datei;

    datei = fopen("daten.txt", "r");
    while (i=1) {
    for (j=0; j<=1000, j++)
    fscanf(datei, "%f", &array[j]);
    if (?)
    i=0;}

    Ich bin noch blutiger Anfänger und habe leider noch nicht so die Kenntnisse im programmieren, deswegen wäre ich riesig dankbar für eure Hilfe! 😃 🙂



  • - formiere deinen Code mit C-Codetags
    - was heißt "... durch Wort getrennt ..."
    - liefere eine vollständige Beschreibung deines Datenformates
    - liefere ein minimal aber compilierbares Beispiel
    - was heißt "funktioniert nicht"? liefere eine vollständige Fehlerbeschreibung mit Soll- und Istwert



  • In der Datei daten.txt stehen untereinander erst das Wort SATZ und dann bis zu 1000 Werte mit Kommazahlen, dann kommt wieder das Wort SATZ und so weiter...

    main void () {
    float array [1001];
    int j=0, i=1;
    FILE *datei;

    datei = fopen("daten.txt", "r");
    for (j=0; j<=1000, j++)
    fscanf(datei, "%f", &array[j]);
    }

    Was meinst du mit codetags?
    Das von mir geschriebene Programm ist nicht ausführbar, da mir die IF-Bedinung fehlt bei der die Schleife abbrechen soll. Sowas wie if (array == NaN)i=0;



  • minimaus schrieb:

    Was meinst du mit codetags?

    lol



  • minimaus schrieb:

    Was meinst du mit codetags?

    Code mit der Maus markieren und dann auf den C Button unter dem 😡 klicken.

    main void () {
      float array [1001];
      int j=0, i=1;
      FILE *datei;
    
      datei = fopen("daten.txt", "r");
      for (j=0; j<=1000, j++)
        fscanf(datei, "%f", &array[j]);
    }
    

    Dann bleibt die Formatierung erhalten und es ist auch in Farbe und bunt.

    Und gib mal ein Beispiel von deiner Datendatei. 5 Zeilen mit 10 Daten in der Zeile reichen.
    Eingefasst in Code-Tags (diesmal dem Code-Button)



  • main void ()
    

    Das ist doppelt falsch 🙂

    fscanf(datei, "%f", &array[j]);
    

    Das wird so nicht funktionieren, weil SATZ keine Kommazahl ist.



  • DirkB schrieb:

    minimaus schrieb:

    Was meinst du mit codetags?

    Code mit der Maus markieren und dann auf den C Button unter dem 😡 klicken.

    main void () {
      float array [1001];
      int j=0, i=1;
      FILE *datei;
    
      datei = fopen("daten.txt", "r");
      for (j=0; j<=1000, j++)
        fscanf(datei, "%f", &array[j]);
    }
    

    Dann bleibt die Formatierung erhalten und es ist auch in Farbe und bunt.

    Und gib mal ein Beispiel von deiner Datendatei. 5 Zeilen mit 10 Daten in der Zeile reichen.
    Eingefasst in Code-Tags (diesmal dem Code-Button)

    achso, danke!

    SATZ
    -23.9472
    11.3566
    -48.4001
    11.8948
    44.9107
    -24.3331
    8.97492
    51.3933
    -10.9609
    ....
    SATZ
    ...



  • fscanf(datei, "%f", &array[j]);
    

    Das wird so nicht funktionieren, weil SATZ keine Kommazahl ist.[/quote]

    SATZ soll ja auch nicht mehr eingelesen werden, nur das dazwischen....



  • Jeder Wert in einer eigenen Zeile (ist für scanf nicht so wichtig).
    Es beginnt mit SATZ. Das nächst SATZ ist schon der Anfang vom nächsten Datensatz.

    scanf gibt die Anzahl der gelesenen Werte zurück. Wenn das also 0 ist, ist etwas anderes im Eingabestrom.

    for (j=0; j<1001, j++) {
        if ( fscanf(datei, "%f", &array[j]) != 1) {
           // keine Zahl mehr
           break; // Schleife verlassen
        }
      }
    

Log in to reply