Hallo
Ich möchte eine Textdatei mit z.B. folgendem Inhalt einlesen:
1 | Bjarne Stroustrup | Die C++-Programmiersprache | Addison-Wesley | 2000 | c++
2 | George Orwell | 1984|Ullstein | 2005 | 1984
3 | Frank Geisler | Datenbanken Grundlagen | Mitp-Verlag | 2005 | datenbanken
....usw
Dazu verwende ich 2 Strukturen:
struct Buch
{
char Autor[21];
char Titel[41];
char Verlagsname[21];
int Erscheinungsjahr;
};
struct Index
{
char Ordnungsbegriff[41];
int Position;
};
Ich komme bei der einlesen-Funktion nicht weiter:
Das Beispiel von GalileoComputing ist gut aber es bringt mich nicht weiter da die Logfile hier quasi während des einlesens sofort in der Schleife ausgegeben wird:
Ich hoffe Ihr könnt mir weiterhelfen. Ich bin für jeden Tipp dankbar.
Gruss
tromtom
Ich möchte eine Textdatei mit z.B. folgendem Inhalt einlesen:
1 | Bjarne Stroustrup | Die C++-Programmiersprache | Addison-Wesley | 2000 | c++
2 | George Orwell | 1984|Ullstein | 2005 | 1984
3 | Frank Geisler | Datenbanken Grundlagen | Mitp-Verlag | 2005 | datenbanken
....usw
Dazu verwende ich 2 Strukturen:
struct Buch
{
char Autor[21];
char Titel[41];
char Verlagsname[21];
int Erscheinungsjahr;
};
struct Index
{
char Ordnungsbegriff[41];
int Position;
};
Ich komme bei der einlesen-Funktion nicht weiter:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
#define EINGABE "buecher.txt"
//***************** Strukturen Definition ************************************//
struct Buch {
char Autor[21];
char Titel[41];
char Verlag[21];
int Erscheinungsjahr;
};
struct Index {
char Ordnungsbegriff[41];
int Position;
};
void einlesen();
void ausgeben();
void sortieren();
void suchen();
int main(int argc, char **argv) {
FILE *in, *out;
struct Buch s_Buch[N];
struct Index s_Index[N];
char auswahl;
do{
printf("\n ---- Willkommen --- \n");
printf("\n I - Daten importieren");
printf("\n A - Daten ausgeben");
printf("\n F - bestimmten Datensatz ausgeben");
printf("\n S - Daten sortieren");
printf("\n X - Beenden");
printf("\n Bitte auswaehlen: ");
scanf("%c",&auswahl);
switch(auswahl)
{
case 'i':
case 'I':
einlesen(s_Index, s_Buch, in);
break;
case 'a':
case 'A':
ausgeben();
break;
case 'f':
case 'F':
suchen();
break;
case 's':
case 'S':
sortieren();
break;
case 'x':
case 'X':
exit(0);
break;
}
}
while(auswahl != 'x' || auswahl != 'X');
return 0;
}
void einlesen(struct Index *a_index, struct Buch *a_buch, FILE *in)
{
in=fopen(EINGABE, "r");
if(in==NULL)
{
printf("Fehler beim Oeffnen ...\n");
getchar();
}
else
printf("\n Eingabedatei %s erfolgreich geoeffnet! \n", EINGABE);
/******** Variante 1: Formartiertes einlesen mit fscanf ********/
int i=0;
while (!feof(in))
{
fscanf(in, "%s | %s | %s | %s | %s | %s ", &a_index[i].Position, &a_buch[i].Autor, &a_buch[i].Titel, &a_buch[i].Verlag, &a_buch[i]Erscheinungsjahr, &a_index[i].Ordnungsbegriff);
i++;
}
/******** Variante 2 ********/
/* Zeilenweise einlesen und mit strtok den String nach den Trennzeichen aufteilen */
char buf[100];
while( fgets(buf,sizeof(buf),in) != NULL)
{
a_index[i].Position = atoi(strtok(buf,"|"));
strcpy(a_buch[i].Autor, strtok(NULL,"|"));
strcpy(a_buch[i].Titel, strtok(NULL,"|"));
strcpy(a_buch[i].Verlag,strtok(NULL,"|"));
a_buch[i].Erscheinungsjahr=atoi(strtok(NULL,"|"));
strcpy(a_index[i].Ordnungsbegriff, strtok(NULL,"|"));
++i;
}
printf("\n ...erfolgreich importiert! \n");
getchar();
}
void ausgeben(struct Index *a_index, struct Buch *a_buch)
{
int i;
for(i=0; i<5; i++)
{
printf("\n\n Position: ", &a_index[i].Position);
printf("\n Autor: ", &a_buch[i].Autor);
printf("\n Titel: ", &a_buch[i].Titel);
printf("\n Verlag: ", &a_buch[i].Verlag);
printf("\n Erscheinungsjahr: ", &a_buch[i].Erscheinungsjahr);
printf("\n Ordnungsbegriff: ", &a_index[i].Ordnungsbegriff);
}
getchar();
}
Das Beispiel von GalileoComputing ist gut aber es bringt mich nicht weiter da die Logfile hier quasi während des einlesens sofort in der Schleife ausgegeben wird:
Code:
while((fscanf(CSV,"%d:%d,%d.%d.%d,%d:%d,%d.%d.%d,%s\n",
&login_hour,&login_min,&date_day,&date_mon,&date_year,
&logout_hour,&logout_min,&date_dayx,&date_monx,
&date_yearx,name)) != EOF )
fprintf(stdout,"User:%s\nLogin um:%d:%d Uhr am %d.%d.%d\n"
"Logout um : %d:%d Uhr am %d.%d.%d\n\n",
name,login_hour,login_min,date_day,date_mon,date_year,
logout_hour,logout_min,date_dayx,date_monx, date_yearx);
Ich hoffe Ihr könnt mir weiterhelfen. Ich bin für jeden Tipp dankbar.
Gruss
tromtom