CSV-Datei

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
JWalker
Beiträge: 1
Registriert: Sa Dez 31, 2016 2:02 pm

CSV-Datei

Beitrag von JWalker » Sa Dez 31, 2016 2:12 pm

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!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: CSV-Datei

Beitrag von Xin » So Jan 01, 2017 1:32 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten