In C .csv Datei einlesen mit strtok möglich?
Hi, ich habe folgenden Datensatz als .csv Datei vorliegen. Nun möchte ich diesen gerne mit der Programmiersprache in C einlesen und weiterverarbeiten.
Aber ich habe schon Probleme bei dem Einlesen mit srtok. Kann mir jemand helfen und zeigen wie ich diesen Datensatz richtig einlesen kann? Wäre sehr dankbar!
Ich weiß nicht wie ich das Datum einlesen soll, als String? Denn das Datum hat ja Zahlen und das Zeichen /. Aktuell liest der Code ja nur bis zum Datum ein. Aber schon das funktioniert nicht.
Mein Code bis jetzt:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
FILE *read_file(char* filename)
{
FILE *fptr;
if ((fptr = fopen(filename,"r")) == NULL)
{
printf("Error! opening file");
exit(1);
}
return fptr;
flose(fptr);
}
int main(void)
{
int permno;
char date;
FILE *fp = read_file("neu.csv");
char line[100];
char *sp;
while(fgets(line, 100, fp )!= NULL)
{
sp = strtok(line, " ");
permno = atoi(sp);
sp = strtok(NULL, " ");
date = strcpy(line, sp);
printf("%d %s\n",permno, date);
}
return 0;
}
1 Antwort
Ich würde dir Empfehlen die CSV Datei in einen Textbearbeitungs-programm zu öffnen.
In C können Sie eine CSV-Datei (Comma Separated Values) in ein Array einlesen, indem Sie die Datei Zeile für Zeile einlesen und die Werte anhand des Kommas trennen. Hier ist ein Beispiel, wie das in C-Code aussehen könnte:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_ROWS 1000
#define MAX_COLS 100
int main()
{
char data[MAX_ROWS][MAX_COLS];
char buffer[MAX_COLS];
int row = 0;
int col;
// Open the CSV file
FILE* file = fopen("data.csv", "r");
if (file == NULL) {
printf("Error: Could not open file\n");
return 1;
}
// Read the file line by line
while (fgets(buffer, MAX_COLS, file)) {
col = 0;
// Tokenize the line by comma
char* token = strtok(buffer, ",");
while (token != NULL) {
----------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char buffer[1000];
char* token;
// Open the CSV file
FILE* file = fopen("data.csv", "r");
if (file == NULL) {
printf("Error: Could not open file\n");
return 1;
}
// Read the file line by line
while (fgets(buffer, 1000, file)) {
// Tokenize the line by comma
token = strtok(buffer, ",");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, ",");
}
}
// Close the file
fclose(file
Wenn das mit den / nicht funktioniert kannst du es ja durch ein anderes Zeichen ersetzen
Kann ich so aber auch das Datum z.b 07/01/1986 einlesen? Denn das hat ja das Sonderzeichen /. Wenn ich das richtig verstehe kann ich so, wie du sagtest, jede Zeile in einem separaten Array speichern?