Ich muss die Daten aus einer CSV-Datei (Name, Adresse, Telefon ...) zu einer Struktur meines C-Programms. Es war leider erfolglos. Ich habe versucht, mit der STRTOK-Funktion jedes Mal, wenn ein ";" (weil es sich um eine kommagetrennte Datei handelt).Parsing CSV-Daten in Struktur
Hier ist, was ich getan habe:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define MAX_STR_LEN 256
#define MAX_BOOKS 256
struct estrutura
{
int id;
char nome[40];
char endereco[40];
char cidade[40];
char pais[20];
char cep[10];
char nasc[12];
char telefone[14];
char total[20];
};
struct estrutura cliente[200];
FILE *pFile;
//allocate buffer in each line
char *buf = malloc(MAX_STR_LEN);
char *tmp;
void abrir();
/* Functions to be coded
int menu();
int menu2(); //manutencao de clientes
void adicionar();
void alterar();
void excluir();
void exibir();
void pesquisar(); */
main()
{
system("cls");
abrir();
//menu();
}
void abrir() //open the csv file and copy it to
{
/* FileStream for the Library File */
FILE *pFile;
/* allocation of the buffer for every line in the File */
char *buf = malloc(MAX_STR_LEN);
char *tmp;
/* if the space could not be allocated, return an error */
if (buf == NULL) {
printf ("No memory\n");
}
if ((pFile = fopen("control.csv", "r")) == NULL) //Reading a file
{
printf("File could not be opened.\n");
}
int i = 0;
while (fgets(buf, 255, pFile) != NULL)
{
if ((strlen(buf)>0) && (buf[strlen (buf) - 1] == '\n')) //checa leitura
buf[strlen (buf) - 1] = '\0';
tmp = strtok(buf, ";");
cliente[i].id = atoi(tmp); //atoi for int
tmp = strtok(NULL, ";"); //use strcpy for char
strcpy(cliente[i].nome,tmp);
tmp = strtok(NULL, ";");
strcpy(cliente[i].endereco, tmp);
tmp = strtok(NULL, ";");
strcpy(cliente[i].cidade, tmp);
tmp = strtok(NULL, ";");
strcpy(cliente[i].pais, tmp);
tmp = strtok(NULL, ";");
strcpy(cliente[i].cep, tmp);
tmp = strtok(NULL, ";");
strcpy(cliente[i].nasc, tmp);
tmp = strtok(NULL, ";");
strcpy(cliente[i].telefone, tmp);
tmp = strtok(NULL, ";");
strcpy(cliente[i].total, tmp);
//tempBook.ID = atoi(buf); fix below
printf("%i, %s, %s, %s, %s, %s, %s, %s, %s \n",i, cliente[i].id , cliente[i].nome, cliente[i].endereco, cliente[i].cidade, cliente[i].pais, cliente[i].cep, cliente[i].nasc, cliente[i].telefone, cliente[i].total);
i++;
}
//free(buf);
fclose(pFile);
}
Wie kann ich dieses Problem lösen? Ich kann die Daten von 100 Clients im CSV nicht erfolgreich in eine Struktur kopieren.
Vielen Dank seit jetzt!
Bitte schreiben Sie die ersten Zeilen Ihrer CSV-Datei. –
Bitte fügen Sie auch eine Beschreibung des Problems hinzu, das Sie sehen - Ihre Frage sagt uns Ihr Ziel und den Code, zeigt aber nicht an, was Ihr Problem sein könnte! – Toby
In dem Code, den Sie gepostet haben, rufen Sie nie 'abrir' auf, aber Sie rufen' menu' auf, das nicht existiert. –