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 21

    irgendwie 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.


Anmelden zum Antworten