Also arbeite ich an einem Klassenprojekt, das einen Lagerbestand verwalten wird. Das Programm muss Produkte entfernen/hinzufügen sowie Bestandszählungen aktualisieren. Wenn das Programm ausgeführt wird, muss das Strukturarray von einer Inventardatei initialisiert werden, deren Werte durch Kommas getrennt sind, wodurch nach jeder Verwendung alle Daten gespeichert werden.Importieren einer CSV-Liste in eine Array-Struktur in C
Hier sind die Dateidaten.
1000,1.49,3.79,10,0,Fish Food
2000,0.29,1.59,100,1,Angelfish
2001,0.09,0.79,200,1,Guppy
5000,2.40,5.95,10,0,Dog Collar (Large)
6000,49.99,129.99,3,1,Dalmatian Puppy
Hier ist das Strukturlayout.
struct inventory_s
{
int productNumber;
float mfrPrice;
float retailPrice;
int numInStock;
char liveInv;
char productName[PRODUCTNAME_SZ];
};
Und hier ist der Code
int fileData()
{
FILE* pFile;
char *buf = malloc(MAX_INVENTORY); // MAX INVENTORY = 50
char *info;
if ((pFile = fopen("inventory.txt", "r")) == NULL) //Reading a file
{
printf("File could not be opened.\n");
}
int i = 0;
while (fgets(buf, MAX_INVENTORY, pFile) != NULL)
{
if ((strlen(buf)>0) && (buf[strlen (buf) - 1] == '\n'))
buf[strlen (buf) - 1] = '\0';
info = strtok(buf, ",");
inventory[i].productNumber = atoi(info);
info = strtok(buf, ",");
inventory[i].mfrPrice = atof(info);
info = strtok(NULL, ",");
inventory[i].retailPrice = atof(info);
info = strtok(NULL, ",");
inventory[i].numInStock = atoi(info);
info = strtok(NULL, ",");
strcpy(inventory[i].liveInv, info);
info = strtok(NULL, ",");
strcpy(inventory[i].productName, info);
printf("%i, %f, %f, %i, %s, %s \n", inventory[i].productNumber , inventory[i].mfrPrice, inventory[i].retailPrice , inventory[i].numInStock, inventory[i].liveInv, inventory[i].productName);
i++;
}
fclose(pFile);
return 0;
}
Gerade jetzt alles, was ich nicht bekommen, wenn ich den Code ausführen, aber wenn ich laufe nur bis zur ersten Initialisierung
info = strtok(buf, ",");
inventory[i].productNumber = atoi(info);
ich alle ersten Werte richtig zugeordnet.
Entfernen Sie nicht das Probelesen "\ n" und ändern Sie Ihre Delimiterliste in '", \ n "'. –
OT: 'printf (" Datei konnte nicht geöffnet werden. \ N ");' aber Sie fahren fort, den Code auszuführen ... Ich schlage vor, 'exit (EXIT_FAILURE);' zu beenden oder von der Funktion in diesem Fall zurückzukehren. –
Hinweis: Verwenden Sie Gleitkomma niemals für genaue Werte/Berechnungen. Verwenden Sie Ganzzahlen, die auf die kleinstmögliche Größe skaliert sind (z.Cent) statt. – Olaf