in c aus datei richtig auslesen

Hi ich habe folgendes problem
ich kann in die datei richtig reinschreiben mit fprintf
der eintrag sieht dann so aus in jeder zeile
;;;;keiner

aber wie kann ich den scheiß jetzt wieder richtig auslesen ich habs mit fscanf probiert
aber er setzt einfache die ganze zeile beim Titel rein und das in jeder zeile
buecherei ist eine struktur
ANZAHL ist eine define am anfang

void laden(void)
{
int i=0;
FILE * datei_zeiger;
datei_zeiger=fopen("buecherei.txt","r");
for (i=0;i<ANZAHL;i++)
{
fscanf(datei_zeiger, "%s;%s;%s;%s;%s\n",buecherei.Titel,buecherei.Autor,buecherei.ISBN,buecherei.Datum,buecherei.Ausleiher);
}
fclose(datei_zeiger);

}

ich habe es auch schon mit %[^;] hinter den %s probiert aber hat nichts gebracht
auch wenn ich Titel Autor ISBN Datum und ausleiher eintrag habe ich keinen erfolg
wenn jemand lösungsvorschläge hat wäre ich sehr dankbar

Danke

edit:

habs jetzt geschafft das er den Titel richtig anzeigt aber bei auto hört er beim leerzeichen auf

"%[^;];%s;%[^;];%s;%[^;];%s;%[^;];%s;%[^;];%s;\n"
das steht jetzt drin
warum macht der nur des erste richtig
das ganze proggramm gibts hier
http://people.freenet.de/macfrosty/buecherei.c
um den fehler nun zu simulieren
programm kompieren
97 standart herstellen
98 daten anzeigen lassen
6 daten speichern in buecherei.txt
99 programm beenden und speicher leeren
programm starten
95 daten laden
98 daten anzeigen lassen und hier sieht man den fehler wenn da er ein strichkomma immer in die nächste zeile tun sollte
 
Hi,

da du es schon schaffst aus der Datei zeilenweise auszulesen würde ich eine Funktion schreiben welche die Strichpunkte sucht bzw. deren Index und dann immer Element für Element ( von Index - bis Index) in der richtigen Variable abspeichert.
Vielleicht gibs was wie strcpy oder so das es dann mit Indexübergabe automatisch macht, das weiss ich aber nicht so genau.

mfg ecologys
 
Also, ich nehme mal an, dass du in der Lage bist eine Zeile der Datei herauszulesen...

Code:
char *pointer, char *Zeile=orginal;    //damit wir mit pointer-verschieben spielen können

do{
   pointer=strchr(Zeile,';');  //suchen wir den ersten ";"
   if(pointer)    //wenn wir NULL zurückbekommen sind wir am Ende, ansonsten 
       pointer*=0;  //pointer auf 0 setzten (also die "Zeile"-pointer "kürzen"

   strcpy(Titel/Autor/etc,Zeile);  //Dinge herauskopieren/sachen machen

   pointer*=';';  //stellen wir pointer wieder her
   Zeile=pointer+1; //verschieben wir den "Zielen" pointer auf die Position von    pointer und +1, damit wir den ';' überspringen
}while(pointer);  //und wieder von vorne ;)

Naja, wie immer bei mir: ist ein stegreifprodukt, also keine Garantie :D Fehler, müsst ihr schon selber herausfiltern;) ist nur ein Denkanstoß....

MfG
Mobius

P.S.: wenn du nicht versteht, wie ein Pointer funzt:

Ich gehe mit meiner Freundin futtern;Frank Kafka;1998 <--- orginal

pointer (nach strchr()) = ';Frank Kafka;1998'

pointer =0;

orginal: "Ich gehe mit meiner Freundin futtern\0...."

pointer*=';'

orginal: "Ich gehe mit meiner Freundin futtern;Frank Kafka;1998"

orginal=pointer+1;

orginal: "Franz Kafka;1998"
 
Zurück
Oben