Seite 1 von 1

CSV-Datei

Verfasst: Sa Dez 31, 2016 2:12 pm
von JWalker
Wir sollen für ein Praktikum (siehe Anhang!) eine CSV-Datei einlesen und mit dieser dann weiter arbeiten. Ich habe schon viel gesucht und probiert doch noch immer keinen richtigen Ansatz der mit gefällt.
Ich hatte mir gedacht, dass ich die Datei einlese und dabei die einzelnen Elemente auf einer extra Variable speichern kann, um mit der dann weiter zu arbeiten. Nur leider gelingt mir das nicht so richtig.

Code: Alles auswählen

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include "praktikum.h"
#define MAX_BUFFER 200

struct daten {
    int anzahl;
    int einheit;
    int preis;
    char name [50];
};
typedef struct daten D; // Struktur als neue Variable deklariert

int main(int argc, char** argv) {
    FILE *input = 0;
    char filename [] = "Dateipfad/Datei.csv";
    input = fopen(filename, "r");
Nun habe ich schon etliche Möglichkeiten über fgets, fscanf ausprobiert doch nichts hat geholfen. Hat vielleicht einer eine Lösung.
Wäre sehr dankbar dafür!

Re: CSV-Datei

Verfasst: So Jan 01, 2017 1:32 pm
von Xin
Du kannst eine CSV-Datei mit fscanf einlesen, aber das ist recht fehleranfällig.

Ich rate Dir dazu, die komplette Datei mit fread einzulesen und dann zu parsen. Das bedeutet, dass Trennsymbole suchst, also im Falle eine CSV-Datei das Komma, das Newline-Zeichen und das End-Of-File-Zeichen (Null).
Entsprechend merkst Du Dir, wo ein Text zwischen den Trennsymbolen anfängt und wo er endet (Du schreibst auf das Trennsymbol einfach eine Null). Den String untersuchst Du nun, ob er zu Deinen Erwartungen passt. Als erstes erwartest Du ein Integer, dann ein Integer für die Einheit, dann ein Double als Preis und dann einen String. Die ersten drei musst Du entsprechend mit atoi und atof konvertieren, den String musst Du mit strcpy kopieren (was nur klappt, wenn Du die Trennsymbole auf Null setzt).

So gehst Du Zeile um Zeile durch, erwartest vier Werte und füllst damit Deine Struktur.