Anzahl von Zeilen in einer Datei bestimmen.
-
Also deine Version läuft....
Hier mal mein kompletter Code:# include <stdio.h> # include <ctype.h> # include <stdlib.h> int zeichenzahl(FILE *text) { int i, c; i=0; while(1) { c = fgetc(text); if (c==EOF) break; i++; } return i; } int umbruchzahl(FILE *text) { int i, c; i=1; while(1) { c = fgetc(text); if (c==EOF) break; if (c=='\n') i++; } return i; } int charzahl(FILE *text) { int i, c; i=0; while(1) { c = fgetc(text); if (c==EOF) break; if (isalpha(c)) i++; } return i; } int intzahl(FILE *text) { int i, c; i=0; while(1) { c = fgetc(text); if (c==EOF) break; if (isdigit(c)) i++; } return i; } int grosscharzahl(FILE *text) { int i, c; i=0; while(1) { c = fgetc(text); if (c==EOF) break; if (isupper(c)) i++; } return i; } void speichern (FILE *text , FILE *ausgabe) { int c; while (1) { c=fgetc(text); if (c==EOF) break; fputc(c , ausgabe); } } int main(int argc, char *argv[]) { FILE *datei, *speicher; int i; datei = fopen(argv[1], "r"); speicher=fopen(argv[2] , "w+"); printf("%d Argumente festgestellt.\n", argc); for ( i = 0; i < argc; i++ ) { printf("%s\n", argv[i]); } if (datei == NULL) { printf("Fehler beim Einlesen der Lesedatei"); return 1; } else printf("Erfolg beim Einlesen der Lesedatei!\n\n"); if (datei == NULL) { printf("Fehler beim Einlesen der Speicherdatei"); return 1; } else printf("Erfolg beim Einlesen der Speicherdatei!\n\n"); fprintf(stdout, "Die Datei besitzt %i Zeichen ", zeichenzahl(datei)); fseek(datei, 0l, SEEK_SET); fprintf(stdout, "und %i Zeilen.\n", umbruchzahl(datei)); fseek(datei, 0l, SEEK_SET); fprintf(stdout, "Die Zeichen gliedern sich in %i Buchstaben, ", charzahl(datei)); fseek(datei, 0l, SEEK_SET); fprintf(stdout, "%i Ziffern und ", intzahl(datei)); fseek(datei, 0l, SEEK_SET); fprintf(stdout, "und %i Zeilenumbrueche.\n", umbruchzahl(datei)-1); fseek(datei, 0l, SEEK_SET); fprintf(stdout, "Alle Buchstaben wurden, nach Moeglichkeit, in Grossbuchstaben umgewandelt.\n%i Buchstaben waren bereits gross geschrieben und wurden daher nicht umgewandelt.", grosscharzahl(datei)); speichern(datei , speicher); fclose(datei); fclose(speicher); return 0; }
-
füge vor dem speichern( datei, speicher);
ein
rewind( datei );
ein.
Dann läufts..Edit:
Und deine 2.
if (datei == NULL) {
muss
if (speicher == NULL {
heißen.
-
Alles klar, danke funktioniert.
Aber warum das rewind? Der Befehl ist mir neu.
Tut fseek hier seine Sache nicht oder wie?
-
rewind setzt die Position auf den Beginn der Datei.
-
Hmm, offensichtlich scheint fseek nicht so zu klappen, wie du meinst.
When using fseek on text files with offset values other than zero or values retrieved with ftell, bear in mind that on some platforms some format transformations occur with text files which can lead to unexpected repositioning.
Ich arbeite immer mit rewind, um die Datei auch wirklich zurückzuspulen.
-
Okay, wieder was gelernt.
Ich danke für eure Hilfe
-
HighLigerBiMBam schrieb:
Oder so? "prog.exe pfad\datei.bla" Ganz falsch!
Warum soll das denn falsch sein? Das ist doch einfacher Text. Da geht doch der Compiler nicht mehr drüber und ersetzt die Escapesequenzen.
-
Uff... Ich könnte schwören, dass es letztens nicht ging... Was für Drogen hab ich an dem Tag genommen?
Egal, funktioniert \ und \\ ... (heute lol)