csv datei einlesen

Gast #2721872
Lesenswert?

Hallo ich bin Schüler und fange gerade an mich mit C zu beschäftigen.
Habe von meinem Lehrer eine Aufgabe zu EM bekommen. ICh soll aus eine 
csv Datei Daten einlesen und dann weiter bearbeiten.Leider komme ich 
nicht über das erste if hinaus. Kann mir jemand sagen wo mein Fehler 
liegt?
1
#include <stdio.h> 
2
#include <stdlib.h> 
3
#include <string.h> 
4

5
#define MAX_DATENSAETZE 32 
6
#define MAX_ZEILENLAENGE 128 
7

8

9
#define FLDLEN_NAME             17 
10
#define FLDLEN_VORNAME             17 
11
#define FLDLEN_GEBURHTSTAG        11 
12
#define FLDLEN_VEREIN             33 
13

14

15
const char *position[] = { 
16
    "Tor", 
17
    "Abwehr", 
18
    "Mittelfeld", 
19
    "Angriff" 
20
}; 
21

22
/* 
23
 * 
24
 */ 
25
struct spieler  { 
26

27
    int trikot; 
28
    int position_code; 
29
    char name[FLDLEN_NAME]; 
30
    char vorname[FLDLEN_VORNAME]; 
31
    char geburtstag[FLDLEN_GEBURHTSTAG]; 
32
    char verein[FLDLEN_VEREIN]; 
33
    int spiele; 
34
    int tore; 
35

36
}; 
37

38

39
typedef struct spieler Spieler; 
40

41

42

43
int main(void) 
44
{ 
45
    FILE *LeseDaten = NULL; 
46
    int x = 0; 
47
    Spieler xSpieler[MAX_DATENSAETZE]; 
48

49
   LeseDaten = fopen("C:\\Benutzer\\test\\xt.csv","r");  
50
    if(LeseDaten == NULL) 
51
    { 
52
        printf ("Fehler beim Oeffnen der csv\n"); 
53
        fflush(stdin); 
54
        getchar(); 
55
        return 1; 
56
    } 
57
     while((fscanf(LeseDaten, "%d,%d,%s,%s,%d,%s,%d,%d\n", 
58
     xSpieler[x].trikot,xSpieler[x].position_code,xSpieler[x].vorname,xSpieler[x].name, 
59
     xSpieler[x].geburtstag,xSpieler[x].verein, xSpieler[x].spiele,xSpieler[x].tore)) != EOF) 
60
     { 
61
           x++; 
62
     } 
63
      printf("%d, %d, %s\n", xSpieler[0].trikot, xSpieler[0].position_code, xSpieler[0].vorname);         
64
      printf("%d, %d, %s\n", xSpieler[1].trikot, xSpieler[1].position_code, xSpieler[1].vorname); 
65
     fflush(stdin); 
66
     getchar(); 
67
     return 0; 
68
}
#2721875
Lesenswert?

Schüler94 schrieb:
> Leider komme ich nicht über das erste if hinaus.
> Kann mir jemand sagen wo mein Fehler liegt?

der besteht darin, daß du nicht beschreibst, warum du "nicht über das 
erste if hinaus kommst".

Gibt es einen Übersetungsfehler des Compilers, oder wird eine andere 
Datei geöffnet, oder schaltet sich die Kaffemaschine statt dessen ein, 
oder was passiert anstelle dem was du erwartest?
#2721916
Lesenswert?

Und wenn du die Datei dann öffnen kannst, dann rate ich dir dringend 
dazu, deinen Code NICHT Zeichen an Zeichen auf Knirsch zu schreiben. Du 
DARFST zwischen "Wörter" Leerzeichen einstreuen. Du darfst dort auch die 
Zeilen umbrechen. Gerade bei den typischen langen Argumentlisten zu 
scanf (in deinem Fall fscanf) ist es besonders wichtig, dass man leicht, 
schnell und fehlerfrei die Zuordnung des Symbols in der Formatliste zur 
Variablen herestellen kann
1
     while((fscanf(LeseDaten, "%d,%d,%s,%s,%d,%s,%d,%d\n",
2
                              xSpieler[x].trikot,
3
                              xSpieler[x].position_code,
4
                              xSpieler[x].vorname,
5
                              xSpieler[x].name, 
6
                              xSpieler[x].geburtstag,
7
                              xSpieler[x].verein,
8
                              xSpieler[x].spiele,
9
                              xSpieler[x].tore)) != EOF)

steht im Formatstring ein %d, dann musst du die Adresse eines int 
angeben. Das tust du aber nicht! da fehlen ein paar &
Bei einem %s allerdings, ist der Name des Arrays bereits die Adresse. Da 
braucht man dann keine &
#2721919
Lesenswert?

Schüler94 schrieb:
> Er kann die Datei nicht öffnen ich weis aber nicht warum.

* Die Datei ist am richtigen Ort
* Tippfehler in Datei oder Pfadangabe
* Datei in einem anderen Programm geöffnet
* Von einem vorhergehenden Versuch ist die Datei im Betriebssystem
  als geöffnet markiert
* Keine Berechtigung, die Datei von dort zu öffnen
* ....

Da gibts viele Möglichkeiten
#2721931
Lesenswert?

Schüler94 schrieb:
> LeseDaten = fopen("C:\\Benutzer\\test\\xt.csv","r");
                           ^^
funktioniert das Öffnen der Dateien so?

Ich hatte mal irgendwelche Probleme, durch diese 
Windows-Phantasie-Namen.

Was man auch häufig beobachten kann:
Der Explorer Zeigt das Verzeichnis C:\Programme zwar an, installiert man 
aber ein Programm explizit nach C:\Programme hat man auf einmal 2 
Verzeichnisse diesen Namens. Vorauswahl ist in den Installern auch meist 
c:\program files, wo nach erfolgreicher Installation das Programm dann 
unter c:\Programme auftaucht.

Was ich sagen will: vielleicht ist das ein Problem mit diesen virtuellen 
Windows-Datei/Pfad-Namen.
leg mal deine Datei in einen selbsterstellten Ordner direkt unter C (und 
vergiss nicht den neuen Pfad einzucodieren)
#2722128
Lesenswert?

Robert L. schrieb:
> das muss mit ziemlicher Sicherheit c:\Users\test\... lauten

das ist doch schrott.
Ich hab immer noch XP aber bei meinem Bruder oder Eltern die Vsta/win7 
haben hat mich das angekotzt.

Man bekommt überall verschiedene Namen für das selbe Verzeichnis und je 
nach Kontext ist nur einer richtig.
Entweder man macht das ganze richtig und das OS handelt es komplett 
intern und der Benutzer/Programmierer bekommt gar nix davon mit, oder 
man lässt es ganz.
Gast #2722409
Lesenswert?

Man baut Programme "schichtenweise" auf, die man jeweils einzeln testet, 
dann findet man auch schneller die Fehler. Und man macht erst dann mit 
dr nächsten Schicht weiter, wenn die darunter liegende Schicht läuft. 
Also z.B.:

- datei öffnen, schliessen ... Datei gefunden, Handle true?

- aus Datei Zeile für Zeile lesen (und anzeigen) bis Ende . Wird sauber 
auf EOF reagiert, gibts keine Exception?


- dann die gelesenen Zeilen an den Kommata teilen, anzeigen

- usw.
Persönliche Seite #2723174
Lesenswert?

was? schrieb:
> Vlad Tepesch schrieb:
>> Entweder man macht das ganze richtig und das OS handelt es komplett
>> intern und der Benutzer/Programmierer bekommt gar nix davon mit, oder
>> man lässt es ganz.
>
> Als Programmierer benutzt du einfach die Windows API und gut ist.

Das is jetzn Scherz, oder?

Es geht doch darum, anhand eines kleinen Beispiels C zu lernen.
Und nicht darum, wie man um ein verkorxtes Betriebssystem rumhackt und 
sich nebenbe noch mehr Systemabhängigkeiten reinzieht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren