Wörter und Sätze in einer Datei zählen
-
@Frank:
nur schade, dass wir im C Forum sind und dein Code leider C++ ist
-
@Shade Of Mine
gut gesehen, den Code in C umzusetzen müsste jeder in der Lage sein.
-
Na Klasse, dann bleib ich als Newbie außen vor.
-
Original erstellt von <Frank>:
gut gesehen, den Code in C umzusetzen müsste jeder in der Lage sein.So würde ich das Programm ja nicht mal in C++ schreiben. Die Datei hat im Speicher einfach nichts verloren.
#include <stdio.h> #include <string.h> int main() { int leerzeichen, satzendezeichen, c; leerzeichen = satzendezeichen = 0; while ((c = getchar()) != EOF) if (c == ' ') ++leerzeichen; /* Warum nicht auch '\n'? */ else if (strchr(".!?", c)) ++satzendezeichen; printf("Es sind %d Woerter und %d Saetze im Text\n", leerzeichen + 1, satzendezeichen); return 0; }
-
@Daniel E.
*So würde ich das Programm ja nicht mal in C++ schreiben. Die Datei hat im Speicher einfach nichts verloren.
*
Du solltest dir nochmal die Frage durchlesen.Es geht um txt-Dateien und zählen.
Mal abgesehen davon gehört sowas nicht in main.
-
@Daniel E.
Und mal abgesehen davon wann ist bei deinem Programm Eingabeende ?
-
Ich würde sagen, wenn getchar()==EOF
-
ich glaub mit STRG + Z
-
Das Problem ist, das niemals EOF erreicht wird auch nicht STRG Z.
-
Wenn du in deiner DOS-Box Ctrl+Z drückst, sollte EOF gesendet werden. Auf Unix ist es in der Regel Ctrl-D.
Darum gehts ja auch garnicht. Wenn du nicht von stdin sondern aus einer Datei lesen willst, musst du ja nur getchar() durch fgetc(filestream) ersetzen.
Und ob das hier nun in der main() steht oder sonstwo ist genauso irrelevant.
-
Original erstellt von <Frank>:
Du solltest dir nochmal die Frage durchlesen.Es geht um txt-Dateien und zählen.Das mit dem Lesen habe ich mit ~6 Jahren gelernt und es klappt seitdem auch ganz ordentlich. Es ging natürlich nicht darum, Textdateien zu zählen, lies die Frage doch einfach nochmal.
Mal abgesehen davon gehört sowas nicht in main.
Ahja. Aber das Einlesen von Dateien und die Ausgabe gehört rein.
Das Problem ist, das niemals EOF erreicht wird auch nicht STRG Z.
Ne, klar. Darum ist EOF auch so ungeheuer sinnvoll.
Unter Unix idR CRTL+D wenn von stdin gelesen wird, ansonsten liefert getchar EOF wenn das Ende des Steams erreicht ist.
Mein Programm funktioniert übrigens immer genau dann richtig, wenn weniger oder genau INT_MAX Leer- bzw Satzzeichen auftauchen und der 'unsigned char'-Bereich kleiner als der 'int'-Bereich ist. Recht unabhängig von der Länge des Eingabestroms, was man von deiner Lösung nicht erwarten kann. Ist schon wieder Fasching oder 1. April oder so?
-
@Daniel E
*lies die Frage doch einfach nochmal.
*
kann ich nur zurückgeben.*Ich möchte ein Programm schreiben, dass alle Wörter und Sätze in einer
.txt Datei zählt, damit ich das nicht immer manuell machen muss.
Außderdem soll die Anzahl der Sätze gezählt werden. Dabei sollen
die normalen Satzschlusszeichen: .;?;! als Endpunkt genommen werden.
*
-
Das mit dem Zitieren klappt schon sehr, sehr gut. Du lernst bestimmt dann auch bald das mit dem Verstehen.
-
Muß sagen ich kann dem was Frank sagt teilweise echt zustimmen.In erster Linie ist sein Programm für mich als Einsteiger auch besser nachzuvollziehen.
Das mit dem Zitieren klappt schon sehr, sehr gut. Du lernst bestimmt dann auch bald das mit dem Verstehen.
Ich glaube auch eher das das Programm in einer bestehenden txt suchen soll (So steht es zumindest im Text).
-
@Daniel E.
Wer lesen kann ist klar im Vorteil.
*INT_MAX Leer- bzw Satzzeichen auftauchen
*
Den Text will ich sehen.
-
Original erstellt von <Newbie>:
Muß sagen ich kann dem was Frank sagt teilweise echt zustimmen.In erster Linie ist sein Programm für mich als Einsteiger auch besser nachzuvollziehen.Amen. Mein Programm ist im Wesentlichen das ein Beispiel aus K&R2. Du kannst die Kritik gerne an die beiden Herren weiterreichen. Dann lernst Du C und keinen Mist.
Ich glaube auch eher das das Programm in einer bestehenden txt suchen soll (So steht es zumindest im Text).
Eine Textdatei wird in eines implemenzierungsspezifischen Zusammenhang an das Programm überreicht ('./file < text' zB), während Frank sich auf den Namen "Text.txt" versteift. Was sich besser in eine gewöhnliche Arbeitsumgebung wie Unix einfügt dürftest Du selbst herausfinden können.
Original erstellt von <Frank>:
**Wer lesen kann ist klar im Vorteil.
INT_MAX Leer- bzw Satzzeichen auftauchenDen Text will ich sehen.**
Bei deinen Integern gibt die Norm eine Überlaufsemantik vor? Interessant. Oder wolltest Du nur wissen, dass es Quelldateinen > 20GB gibt?
-
Lassen wir das hier lieber, du verstehst nicht die eigentliche Frage, die hier gestellt wurde.
1.Datei wurde schon erstellt.
2.Datei wird neu geöffnet und dann nach Leer bzw Satzzeichen durchsucht.Deine Variante:Text eingeben,Text durchsuchen.
Verstehst du endlich ???
Nochmal. Textdatei wurde schon erstellt und wird nun nach öffnen,einlesen durchsucht.
-
Original erstellt von <Frank>:
...
Deine Variante:Text eingeben,Text durchsuchen.
Verstehst du endlich ???
...Quatsch; Du kannst das Programm von Daniel E. so aufrufen:
programm < eingabedatei
Und diese Art, Programme zu starten, ist durchaus üblich!
[ Dieser Beitrag wurde am 30.06.2003 um 12:46 Uhr von mady editiert. ]
-
Also die Dateien sind schon alle vorhanden...
Leider gelingt es mir nicht, hiermit die Datei text.txt nach der Anzahl der Zeichen durchzusuchen....Bitte nochmal einmal helfen....
#include <stdio.h> int main() { FILE *f; f=fopen("text.txt","r"); if (f==NULL) printf("Fehler beim Öffnen"); else printf("Alles Gut"); int bc=0; while( (bc=fgetc("text.txt")) != EOF) printf("Die Datei hat %d Zeichen\n",bc); fclose(f); return 0; }
-
Original erstellt von Domnick:
**```cpp
while( (bc=fgetc("text.txt")) != EOF)printf("Die Datei hat %d Zeichen\n",bc);
Di Schleife umfasst die Ausgabe. Du gibst bei jedem eingegebenen Zeichen dessen numerische Repräsenation aus ('ASCII') und behauptest frech, dieser Wert entspräche der Anzahl der Zeichen. Das ist Quatsch, Du musst explizit mitzählen, also etwas wie 'while (...) ++zeichen;' schreiben. Außerdem hast Du eine so schöne Variable f gebaut und schreibst trotzdem "text.txt" als Argument von fgetc. Das funktioniert nicht.