J'ai une structure de données à ajouter dans une liste chaînée. La structure de données proviendrait d'un fichier avec une entrée comme celui-ci par exemple:Division d'une chaîne à partir d'un fichier, puis stockage dans une structure
I0001|Item 1|Item 1 Desc|3.50|50
I0002|Item 2|Item 2 Desc|3.00|20
I0003|Item 3|Item 3 Desc|4.00|10
La structure:
typedef struct stock
{
char id[ID_LEN + NULL_SPACE];
char name[NAME_LEN + NULL_SPACE];
char desc[DESC_LEN + NULL_SPACE];
Price price;
unsigned onHand;
} Stock;
Mon code à ce jour est la suivante:
Boolean loadStock(VmSystem * system, const char * fileName)
{
Stock data;
char id[ID_LEN + NULL_SPACE], name[NAME_LEN + NULL_SPACE], desc[DESC_LEN + NULL_SPACE];
FILE *fp;
char str[200], *token;
if((fp = fopen(fileName, "r")) != NULL)
{
printf("File loaded\n");
}
else
{
perror("Cannot open file");
return FALSE;
}
if (fgets(str,sizeof(str),fp) == NULL)
{
perror("failed to read from file");
return FALSE;
}
while(fgets(str,sizeof(str),fp) != NULL)
{
token = strtok(str, "|");
while(token != NULL)
{
/** DO SOMETHING HERE **/
printf("%s\n", token);
token = strtok(NULL,"|");
}
}
fclose(fp);
return TRUE;
}
J'ai écrit ce mais cela ne fonctionne pas:
if(i%5 == 0)
{
strcpy(id, token);
}
else if(i%5 == 1)
{
strcpy(name, token);
}
else if(i%5 == 2)
{
strcpy(desc, token);
}
printf("%s\n", id);
token = strtok(NULL,"|");
i++;
memset(id, '\0', sizeof(id));
memset(name, '\0', sizeof(name));
memset(desc, '\0', sizeof(desc));
je rencontre des problèmes en prenant le jeton et l'utiliser pour stocker des valeurs dans la structure
Je vous suggère de ne pas faire le "tokenization" dans une boucle, mais plutôt d'une manière sérielle simple, avec cinq appels à 'strtok' l'un après l'autre. Puis copiez le jeton dans le membre de structure correct. –