Wie kann ich aus einer textdatei *.txt einzelne wörter auslesen?
-
ups, sry
-
bsP
#include <stdio.h> #define MAX_LEN 4096 int main(int argc, char** argv) { FILE* file1,*file2; char line[MAX_LEN], newline[MAX_LEN]; if (argc==1) { fprintf(stderr, "usage: %s filename newfilename\n", argv[0]); return 1; } if (NULL==(file1 = fopen(argv[1], "r"))) { fprintf(stderr, "cannot open %s. Access denied or file not found\n", argv[1]); return 1; } while(fgets(line, MAX_LEN, file1)) { printf(line); } fclose(file1); return 0; }
-
merci
-
Zwei Hinweise:
supertux schrieb:
fprintf(stderr, "cannot open %s. Access denied or file not found\n", argv[1]);
perror(argv[1]);
printf(line);
Nicht gut!
puts(line); // oder printf("%s", line);
-
DrGreenthumb schrieb:
Zwei Hinweise:
printf(line);
Nicht gut!
Und was ist das Problem damit?
-
In der Datei könnten Format-Anweisungen stehen (also %s o.ä.) und printf würde irgendeinen Schrott ausgeben. Oder das Programm stürzt gleich ab.
-
DrGreenthumb schrieb:
In der Datei könnten Format-Anweisungen stehen (also %s o.ä.) und printf würde irgendeinen Schrott ausgeben. Oder das Programm stürzt gleich ab.
stimmt, hab nicht dran gedacht
-
... uuuund "puts()" hat noch den Vorteil, dass es am Ende einen Zeilenumbruch ausgibt.
-
hallo villeicht kann mir ja jemand helfen
habe eine Textdatei die so aussieht :TEILENR KUNDE TEILENR ME BEZEICHNUNG 55866A547X5 12354 ST ABGASANLAGE.
die bezeichnungen bzw oberen felder ändern sich nicht und brauche ich auch nicht. Da sich nur die unteren werte jeweils ändern....wie muß die schleife aussehen, damit ich nur die zweite zeile getrennt mit ";" ??
mit fgets in den puffer aber dann ???? da fehlt mir doch etwas der Ansatz...hier der code :
#include <stdio.h> #include <stdlib.h> #include <string.h> /*-----------globale variablen------------*/ FILE *datei_in; /*FILE pointer für input-datei*/ FILE *datei_out;/*FILE pointer für output-datei*/ FILE *count_p; char name_in[]="quell.txt"; char name_out[]="ziel.txt"; char daten[80]; int count=0; //----------------Hauptprog------------------------- int main() { /* Datei quell.txt zum lesen öffnen,gleichzeitig ziel.txt erstellen */ datei_in= fopen (name_in,"r"); datei_out= fopen (name_out,"w"); if ((datei_in),(datei_out)==NULL) printf(" Fehler beim öffnen der Datei %s \n ",name_in,name_out); else printf ("Dateien %s und %s geoeffnet\n",name_in,name_out); //------------datei zeilenweise lesen----------------- do { fgets (daten,sizeof(daten),datei_in); //------------schleife auslesen des Puffers und einfügen eines ";"-------- if (daten=='\0') ????????????????? ??????????? count+=strlen(daten); fputs(daten,datei_out); } while (!feof(datei_in)); printf ("Anzahl der zeichen in \"%s\" : %d\n" ,name_in,count); fprintf (datei_out, "Anzahl zeichen in \"%s\" : %d\n" ,name_in,count); //------------Dateien schließen--------- fclose (datei_in),(datei_out); system ("Pause"); return 0; }
-
Mal zur Klarstellung was du genau willst:
Du hast also eine Datei, in der ein Satz folgendermaßen aussieht (inclusive den Leerzeichen?):
55866A547X5 12354 ST ABGASANLAGE.
Und in deinem Programm soll das dann so aussehen?
55866A547X5;12354;ST;ABGASANLAGE.
Sonstige Fragen:
Kann in der Bezeichnung eigentlich auch ein Leerzeichen enthalten sein? Sind die Datensätze immer gleich lang?Übrigens:
system("Pause")
-
Hallo AJ,
erstmal vielen dank das du mit meinem Probl. befassen tust...
ja so ungefähr solls aussehen:
55866A547X5;12354;ST;ABGASANLAGE.
ja die teilenr (55866A547X5) ist max 13(+1 zeichen für '\0') zeichen lang, danach kommt noch ein 4 stelliger code (zb: "a234")
diese Zeile mit der bezeichnung..usw ist immer gleich groß, und die 55866A547X5 hat keine Leerzeichen , ist also ein block!
leider folgt schon in der nächsten Zeile ein ganz anderer Suchstring ....
zbLieferschein letzte bestellung 5114 5 vom 5.6.04
ich hab die textdatei..wenn du sie sehen willst ....mail ich sie dir.
das ist verflixt nochmal nicht einfach....
trotzdem vielen dank erstmal.
-
Hallo,
leider muß ich bei meiner List einen ganz anderen Ansatz wählen,da es zu unterschiedlich daten gibt.
werde Random dateizugriff (fseek,fread,fwrite ) benutzen, und diese dann in Struct ablegen....ohh jee das ist umständlich aber die Liste ist halt wie ne Maske aufgebaut.