C textdatei in array einlesen - zum zweiten

Von: , Frage gestellt am Mo, 3. Aug 2009

Hallo ich habe vor nicht allzu langer Zeit hier die Frage gestellt wie man eine textdatei in C in ein Array einlesen kann um dann damit weiterzuarbeiten, vorallem zu rechnen.
Die funktionierende Loesung dafuer war auch sehr gut:

#include <stdio.h>

int main()
{
char fname[] = "rot.txt";
char zeile[128]; /* Zeilenbreite max. */
float rot[512]; /* max. Anzahl werte */
int i, nRot = 0; /* noch 0 Werte */
FILE *fp = fopen(fname,"rt");

/* Teil 1: Einlesen */
printf("Lese %s\n", fname);
if(fp == NULL) {
perror(fname);
return 1;
}

while(fgets(zeile, sizeof(zeile), fp)) {
float val;
if(sscanf(zeile, "%f", &val) > 0) {
rot[nRot] = val;
nRot++;
}
}
fclose(fp);

/* Teil 2: Auswerten */
printf("%d Werte gefunden\n", nRot);
for(i=0; i<nRot; i++) printf("%f\n", rot[i]);

return 0;
}


dies funktioniert gut, wenn ich nur eine spalte in der Datei habe.
Nun habe ich aber mehrere Spalten, jeweils durch Leerzeichen getrennt.

z.B.
1 3
7 14
8 16
11 15

Die Reihen sollen nun jeweils in ein eignes Array eingelesen werden. z1[i] und z2[i].

Kann mir jemand vielleicht helfen wie ich C erklaere, dass es mehrere Spalten sind?

Danke

1 Antworten zu dieser Frage

  1. Antwort von nach 55 Minuten 0 hilfreich
    Re: C textdatei in array einlesen - zum zweiten

    Hallo Nun habe ich aber mehrere Spalten, jeweils durch Leerzeichen
    getrennt.
    z.B.
    1 3
    7 14
    8 16
    11 15

    Die Reihen sollen nun jeweils in ein eignes Array eingelesen
    werden. z1[i] und z2[i].
    Kann mir jemand vielleicht helfen wie ich C erklaere, dass es
    mehrere Spalten sind?
    Analog zum Vorhergehenden, durch sscanf mit einem
    weiteren '%f' - Element.

    sscanf(zeile, "%f %f", &v1, &v2)


    Die entsprechenden Variablen müssen vorher
    natürlich vereinbart werden, also z.B.:
    #include <stdio.h>
    int main() 
    {
    char fname[] = "rot.txt";
    char zeile[128]; /* Zeilenbreite max. */
    float z1[512];  /* max. Anzahl werte */
    float z2[512];  /* max. Anzahl werte */
    int i, N = 0;    /* noch 0 Werte      */
    FILE *fp = fopen(fname,"rt");
    /* Teil 1: Einlesen */
    printf("Lese %s\n", fname);
    if(fp == NULL) {
    perror(fname);
    return 1;
    }
    while(fgets(zeile, sizeof(zeile), fp)) { 
    float v1, v2;
    if(sscanf(zeile, "%f %f", &v1, &v2) == 2) {
    z1[N] = v1;
    z2[N] = v2;
    N++;
    }
    }
    fclose(fp);
    /* Teil 2: Auswerten */
    printf("%d Werte gefunden\n", N);
    for(i=0; i<N; i++) printf("%f %f\n", z1[i], z2[i]);
    return 0;
    }
    


    Grüße

    CMБ

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!