Ich lese eine CSV-Datei mit C und möchte die Token von strtok() in einem Array speichern. Irgendwie, wenn die CSV-Datei mehrere Zeilen hat, bekomme ich nicht die korrekte Ausgabe der Token. Die CSV-Datei sieht wie folgt aus (nur zwei Linien für dieses Beispiel wird die reale Datei mehr als 100 Zeilen hat):strtok() nicht korrekt drucken
abc,def,ghi
jkl,mno
Mein Code ist:
void main() {
FILE *fp;
fp = fopen("simple.csv", "r");
const char s[2] = ",";
char *token;
char *out[5];
int i = 0;
if (fp != NULL)
{
char line[50];
while (fgets(line, sizeof line, fp) != NULL)
{
token = strtok(line, s);
//for (token; token != NULL; token = strtok(NULL, ","))
while (token != NULL)
{
out[i++] = token;
//printf("%s", token);
token = strtok(NULL, s);
}
printf("%s\n", out[0]);
}
//for (i = 0; i < 5; i++)
fclose(fp);
}
else {
printf("error opening file");
}
}
ich jede will Komma Zeichenfolge abgegrenzt in einem Array durch eine Schleife gespeichert werden. Wenn ich das erste Element des Arrays ausdrucken (out[0]
), der Ausgang ist:
abc
jkl
, während ich es nur das Token zu erwarten:
abc
Kann jemand mir bitte lassen Wissen Sie, was das Problem ist?
Sie verwenden die * gleichen * 'line' Puffer für * alle *' fgets'. Natürlich werden die Ergebnisse in jeder Eingabezeile überschrieben. – kaylum
Ich bin ein Neuling. Kannst du mir bitte sagen, wie ich das lösen soll? –
ja, das sind die ersten Spalten. Ich möchte jede Zeichenfolge in der CSV-Datei in einem Array speichern. –