Einlesen und anschließendes Ausgeben einer CSV-Datei

29/06/2010 - 03:13 von gismo82 | Report spam
Hi...

Ich lese in nachfolgendem Programm eine CSV-Datei in eine dynamische
Struktur ein. Diese möchte ich spàter dann auch wieder ausgeben.

Beispielhafte CSV-Datei:

1:Spalte2-Zeile1:Spalte3:Zeile1:19
2:Spalte2-Zeile2:Spalte3:Zeile2:59
3:Spalte2-Zeile3:Spalte3:Zeile3:89

Mein Programm sieht bisher folgendermaßen aus:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

struct Data {
int status;
char *spalte2;
char *spalte2;
int start;
};

int main(int argc, char **argv)
{
struct Data **daten = NULL;

int count = 0;
int i = 0;

int nRet;
size_t *t = malloc(0);

char **gptr = malloc(sizeof(char*));
*gptr = NULL;

FILE *datei = NULL;
datei = fopen("/home/andreas/test.csv", "r");

while( (nRet=getline(gptr, t, timersConf)) > 0)
{

daten = (struct Data **)realloc(daten, (count + 1) * sizeof(struct
Data *));
daten[count] = (struct Data *)malloc(sizeof(struct Data));

daten[count]->status = atoi(strtok(*gptr,":"));
daten[count]->spalte2 = strtok(NULL,":");
daten[count]->spalte3 = strtok(NULL,":");
daten[count]->start = atoi(strtok(NULL,":"));

// Ausgabe 1
printf("%d - %s - %s - %d",daten[count]->status, daten[count]-

spalte2, daten[count]->spalte3, daten[count]->start);



count++;
}

// Ausgabe 2
for (i = 0;i < count; i++) {
printf("%d - %s - %s - %d",daten[i]->status, daten[i]-

spalte2, daten[i]->spalte3, daten[i]->start);


}

fclose(datei);

return 0;
}

Ausgabe 1 (in der WHILE-Schleife)

1 - Spalte2-Zeile1 - Spalte3:Zeile1 - 19
2 - Spalte2-Zeile2 - Spalte3:Zeile2 - 59
3 - Spalte2-Zeile3 - Spalte3:Zeile3 - 89

Ausgabe 2 (nach der WHILE-Schleife)

1 - Spalte2-Zeile3 - Spalte3:Zeile3 - 19
2 - Spalte2-Zeile3 - Spalte3:Zeile3 - 59
3 - Spalte2-Zeile3 - Spalte3:Zeile3 - 89

Die INT-Werte aus Spalte 1 und 4 werden richtig ausgegeben. Doch die
STRING-Variablen sind alle mit dem letzten Wert gefüllt. Leider habe
ich keine Ahnung, warum dies so ist.


Vielleicht kann jemand bitte über meinen Code schauen und entdeckt
vielleicht den Fehler. Ich weiß wirklich keinen Rat mehr.


Danke und Gruß

Andreas
 

Lesen sie die antworten

#1 Leonard Orb
29/06/2010 - 03:31 | Warnen spam
gismo82:

Ich lese in nachfolgendem Programm eine CSV-Datei in eine dynamische
Struktur ein. Diese möchte ich spàter dann auch wieder ausgeben.
[...]
Mein Programm sieht bisher folgendermaßen aus:
[...]
int main(int argc, char **argv)
[...]
Vielleicht kann jemand bitte über meinen Code schauen und entdeckt
vielleicht den Fehler. Ich weiß wirklich keinen Rat mehr.



Falsche Sprache?

Für sowas nimmt man Perl oder Python. Die sind nicht nur viel besser dafür
geeignet, in den dort dafür notwendigen 10 bis 15 Zeilen kann sich mangels
Platz auch kein Fehler verstecken.

Leo

Ähnliche fragen