strtok oder wo liegt mein fehler?
-
hallo,
ich möchte eine csv datei einlesen wobei die einzelnen datensätze durch ; getrennt sind.#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 255 struct data { char id[5]; char time[50]; char sp_akt[5]; char sp_max[5]; char sp_min[5]; char st_akt[5]; char st_max[5]; char st_min[5]; char temperatur[5]; }; int main(int argc, char *argv[]) { FILE *CSV1; //FILE *CSV2; char *File1 = argv[1]; //char *File2 = argv[2]; int i; int len; char *ptr; char line[MAX]; struct data zeile[50]; if(argc < 2) { fprintf(stderr, "Usage: %s <file>", argv[0]); exit(EXIT_FAILURE); } CSV1 = fopen(File1, "r"); if(CSV1 == NULL) { fprintf(stderr, "Error: Can't open file!\n"); exit(EXIT_FAILURE); } /* erste Zeile überlesen */ fgets(line, MAX, CSV1); i = 0; while( (fgets(line, MAX, CSV1) != NULL)) { ptr = strtok(line, ";"); strcpy(zeile[i].id, ptr); ptr = strtok(NULL, ";"); strcpy(zeile[i].time, ptr); ptr = strtok(NULL, ";"); strcpy(zeile[i].sp_akt, ptr); ptr = strtok(NULL, ";"); strcpy(zeile[i].sp_max, ptr); ptr = strtok(NULL, ";"); strcpy(zeile[i].sp_min, ptr); ptr = strtok(NULL, ";"); strcpy(zeile[i].st_akt, ptr); ptr = strtok(NULL, ";"); strcpy(zeile[i].st_max, ptr); ptr = strtok(NULL, ";"); strcpy(zeile[i].st_min, ptr); ptr = strtok(NULL, ";"); strcpy(zeile[i].temperatur, ptr); i++; continue; } fclose(CSV1); len = i; for(i = 0; i < len; i++) printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", zeile[i].id, zeile[i].sp_akt, zeile[i].sp_max, zeile[i].sp_min, zeile[i].st_akt ,zeile[i].st_max, zeile[i].st_min, zeile[i].temperatur); return(0); }
-
rifkin schrieb:
hallo,
ich möchte eine csv datei einlesen wobei die einzelnen datensätze durch ; getrennt sind.und? was passiert? nichts? absturz? oder was?
-
das printf am schluß liefert mir falsche werte.
-
rifkin schrieb:
das printf am schluß liefert mir falsche werte.
wie sehen die denn aus?
-
ok,
meine datei enthält sowas hier:
0;31.08.2006 17:00:37;12,16;13,51;12,09;-9,4;5,8;-12,5;21;
1;31.08.2006 17:00:38;12,17;13,51;12,09;-9,6;5,8;-12,5;21;und das programm liefert:
0 12,16 13,51 12,09 -9,4 5,8 -12,5 21
1 12,17 13,51 12,09 -9,6 5,8 -12,5 21irgendwie fehlt die 31.08.2006 17:00:37 in der ersten zeile zum beispiel
-
Die Lösung verrate ich jetzt nicht, die ist zu einfach.
-
ich bin blöd, ich gebs zu.