Infobeleg: Daten aus Textdatei einlesen



  • Hallo

    deinen Ausdruck kenne ich leider noch nicht, hab erst seit 2 Semestern C.
    Ich meinte, dass abgebrochen wird, sobald in der Datei die Zeichen EOF auftauchen.



  • PlattitüdenAbonennt schrieb:

    deinen Ausdruck kenne ich leider noch nicht, hab erst seit 2 Semestern C.

    2 semester? das sind doch schon ein paar monate 🙄
    guckst du: http://www.cplusplus.com/ref/cstdio/feof.html



  • aha
    naja im 1. Semester haben wir fast nur Struktogramme gezeichnet. 😞

    Nächstes Problem: ich muss schauen, wo im Einheitsbrief die Platzhalter auftauchen und diese dann mit den Kundendaten ersetzen.

    ist da fputc() ein geeignetes MIttel?
    Hier der Brief:

    An $$Anrede_1$$ $$Vorname$$ $$Name$$

    AdrStrAdr_Str

    AdrOrtAdr_Ort

    Betreff: $$Betreff$$

    Sehr $$Anrede_2$$ $$Anrede_1$$ $$Name$$,

    Es freut mich, ihnen mitteilen zu können, dass ihr $$Betreff$$ nun abholbereit bei uns lagert.

    MfG

    char puffer[500],Datei,Text
    
    //Brief einlesen
    
    Brief = fopen("c:\\Brief.txt","r" );
    
    Text=fgets(puffer,500,Brief);
    
    //Vergleichen der Platzhalter; Ersetzen dieser mit den Structdaten
    
    if(strcmp(Text,'$$Anrede_1$$')==0)
    {};
    
    if(strcmp(Text,'$$Anrede_2$$')==0)
    {};
    


  • naja, vom prinzip her kannstes so machen
    1. template datei (datei1) öffnen zum lesen (die mit diesen $$ drin)
    2. output datei (datei2) anlegen
    3. alles aus datei1 nach datei2 kopieren bis $$ gefunden wird
    4. ist datei1 am ende angekommen datei2 und datei1 schliessen und *ende*
    5. alles aus datei1 in ein char array kopieren (variablenname) bis $$ gefunden wird
    6. anhand des variablennamens den inhalt der variablen ermitteln
    7. variable in datei2 speichern
    8. weiter bei schritt 3

    mit fputc, fgetc kann man's machen, vielleicht als zustandsautomat. hast jedenfalls gut zu tun damit 😉



  • Salut Helfer,

    Ich mach die Sachen erst mal Nacheinander.
    Das Ding mit dem EOF hab ich so gelöst, sieht man im Code.

    Aber nun kommt noch eine bekackte Fehlermeldung:

    error C2664: 'fscanf' : Konvertierung des Parameters 1 von 'char *' in 'struct _iobuf *' nicht moeglich
    Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat

    #include "conio.h"
    #include "stdio.h"
    #include "string.h"
    
    #define EOF '\n'
    
    struct Kunde {char Vorname[15];char Nachname[20];int Geschlecht;char Adr_Str[30];char Adr_Ort[20];char Betreff[17];};
    struct Kunde kunde;
    
    void main()
    {
    
    	FILE *Info,*Brief;
    	int k,Nummer =00001;
    	char puffer[500],Datei,Text,Resultat;
    
    Info= fopen("c:\\kunde.txt","r");
    Datei= *fgets(puffer,120,Info);
    
    //Get struct from Kunde.txt
    
    while(Datei!=EOF)
    	{
    	//fgets(puffer,120,Info);
    	fscanf(Datei,"%s%s%d%s%s%s",
    						 &kunde.Vorname,
    						 &kunde.Nachname,
    						 &kunde.Geschlecht,
    						 &kunde.Adr_Str,
    						 &kunde.Adr_Ort,
    						 &kunde.Betreff);
    
    	}
    printf("DAtei enthält: %s%s",kunde.Vorname,kunde.Nachname);
    


  • fscanf will einen FILE*, keinen char*

    c referenz:
    http://www.dinkumware.com/manuals/reader.aspx?b=c/&h=index.html



  • Hallo

    Leider erschließt sich mir der Zusammenhang nicht, denn wenn ich es so:

    FILE *Info,*Brief,*Datei;
    int k,Nummer =00001;
    char puffer[500],Text,Resultat;
    

    mache, kommen diese Fehlermeldungen:

    error C2440: '=' : 'char *' kann nicht in 'struct _iobuf *' konvertiert werden
    Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat

    error C2446: '!=' : Keine Konvertierung von 'int' in 'struct _iobuf *'
    Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat

    error C2040: '!=' : 'struct _iobuf *' unterscheidet sich von 'int' in bezug auf die Anzahl vorgenommener Dereferenzierungen



  • hoerst du zu?

    fscanf will keinen char*, sondern einen FILE*.
    Datei ist ein char*/char[], also falsch.



  • Ey mal nicht so derbe!!
    Bin noch Anfänger, wie du vielleicht gelesen hast.

    ich hab doch jetzt FILE *Datei, was gibt es denn da dran auszusetzen?



  • deine fehlermeldungen haben aber immernoch keinen bezug zu irgendwelchem code.
    ausserdem sagen mir deine fehlermeldungen, dass du den fehler nicht behoben hast oder die meldungen noch alt sind.

    edit: poste einen ganzen code. gib mir was zum arbeiten, wenn du schon hilfe willst. ich kann ja wohl schlecht aus ner glaskugel lesen.



  • Code steht zwar schon auf der 1. Seite, aber hier nochmal:

    #include "conio.h"
    #include "stdio.h"
    #include "string.h"
    
    #define g 500
    
    struct Kunde {char Vorname[15];char Nachname[20];int Geschlecht;char Adr_Str[30];char Adr_Ort[20];char Betreff[17];};
    struct Kunde kunde;
    
    void main()
    {
    
    	FILE *Info,*Brief,*Datei;
    	int k,Nummer =00001;
    	char puffer[g],Text[g],Resultat[g];
    
    Info= fopen("c:\\kunde.txt","r");
    Datei= fgets(puffer,120,Info);
    
    //Get struct from Kunde.txt
    
    while(Datei!='\n')
    	{
    	//fgets(puffer,120,Info);
    	fscanf(Datei,"%s%s%d%s%s%s",
    						 &kunde.Vorname,
    						 &kunde.Nachname,
    						 &kunde.Geschlecht,
    						 &kunde.Adr_Str,
    						 &kunde.Adr_Ort,
    						 &kunde.Betreff);
    
    	}
    printf("DAtei enthält: %s%s",kunde.Vorname,kunde.Nachname);
    


  • PlattitüdenAbonennt schrieb:

    Code steht zwar schon auf der 1. Seite, aber hier nochmal:

    ...edit...snip...
    
    Datei= fgets(puffer,120,Info);
    

    Was soll denn hier passieren?

    char puffer[g]
    

    Sollte auch nicht gehen

    char* puffer = new char[g]
    


  • Gast25250 schrieb:

    char puffer[g]
    

    Sollte auch nicht gehen

    Warum nicht?

    Gast25250 schrieb:

    char* puffer = new char[g]
    

    In C? 🙄



  • Datei= fgets(puffer,120,Info);

    Na hier sollen eingentlich Zeile für Zeile später einmal die einzelnen Kundendaten in ein Strukturfeld geladen werden



  • Datei ist ein dateihandle, also nur ziel des rueckgabewertes von fopen.
    fgets gibt keine dateihandles zurueck.

    das moechtest du gerne lesen:
    http://www.pronix.de/pronix-4.html


Anmelden zum Antworten