Infobeleg: Daten aus Textdatei einlesen
-
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$$
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 3mit 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 Funktionsformaterror 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 Funktionsformaterror 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