jeroen
22.05.2008, 12:53
hi,
ich möchte gern ein Datei einlesen mit hilfe ein c Programms.
Die einzulesende Datei ist eine Textdatei und ist Zeilenweise aufgebaut.
Hier ist mein anfang:
int dateieinlesen(const char* dateiname, const list_t *l)
{
FILE* datei;
int zeilenlaenge;
char* zeilen_puffer;
int ergebnis;
datei = fopen(dateiname, "r");
if ( datei == NULL )
{
ergebnis = FALSE;
}
else
{
while( !feof(datei) )
{
zeilenlaenge = Zeilenlaenge(datei);
zeilen_puffer = (char*) malloc( (zeilenlaenge+1) * sizeof(char) );
fgets(zeilen_puffer, zeilenlaenge+1, datei);
free(zeilen_puffer);
}
fclose(datei);
ergebnis = TRUE;
}
return ergebnis;
}
int Zeilenlaenge(FILE* datei)
{
int i;
char zeichen;
fpos_t alt_pos;
fgetpos( datei, &alt_pos ); // Aktuelle Position merken.
i=0;
while ( ( zeichen = fgetc(datei) ) != '\n' && feof(datei) == FALSE )
{
i++;
}
fsetpos( datei, &alt_pos ); // Zurück auf gemerkte Position.
return (i+1);
}
Das Prinzip sollte klar sein. Ich lesen solang zeichen ein bis ein \n auftaucht. Zuvor sicher ich aber die Position innerhalb der Datei.
Dann reserviere ich mir den erfoderlichen Speicher und lesen die Zeile ein.
In der ersten Zeile klappt alles wunderbar, aber dann klapps nicht mehr. Das Problem ist, glaub ich , das das sichern der Dateipostion nicht geht.
Kann mir mal jemand ne kurzen Tipp geben ?
ich möchte gern ein Datei einlesen mit hilfe ein c Programms.
Die einzulesende Datei ist eine Textdatei und ist Zeilenweise aufgebaut.
Hier ist mein anfang:
int dateieinlesen(const char* dateiname, const list_t *l)
{
FILE* datei;
int zeilenlaenge;
char* zeilen_puffer;
int ergebnis;
datei = fopen(dateiname, "r");
if ( datei == NULL )
{
ergebnis = FALSE;
}
else
{
while( !feof(datei) )
{
zeilenlaenge = Zeilenlaenge(datei);
zeilen_puffer = (char*) malloc( (zeilenlaenge+1) * sizeof(char) );
fgets(zeilen_puffer, zeilenlaenge+1, datei);
free(zeilen_puffer);
}
fclose(datei);
ergebnis = TRUE;
}
return ergebnis;
}
int Zeilenlaenge(FILE* datei)
{
int i;
char zeichen;
fpos_t alt_pos;
fgetpos( datei, &alt_pos ); // Aktuelle Position merken.
i=0;
while ( ( zeichen = fgetc(datei) ) != '\n' && feof(datei) == FALSE )
{
i++;
}
fsetpos( datei, &alt_pos ); // Zurück auf gemerkte Position.
return (i+1);
}
Das Prinzip sollte klar sein. Ich lesen solang zeichen ein bis ein \n auftaucht. Zuvor sicher ich aber die Position innerhalb der Datei.
Dann reserviere ich mir den erfoderlichen Speicher und lesen die Zeile ein.
In der ersten Zeile klappt alles wunderbar, aber dann klapps nicht mehr. Das Problem ist, glaub ich , das das sichern der Dateipostion nicht geht.
Kann mir mal jemand ne kurzen Tipp geben ?