Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Programm zum Zählen von Zeichen in Datei!

Empfohlene Antworten

Veröffentlicht

Ich würde gerne ein Programm schreiben, das die Anzahl der Zeichen in einer Datei zählt. Der Dateiname soll als Parameter übergeben werden. Ich hab das Programm so geschrieben:

#include <iostream>

#include <string.h>

#include <fstream>

#include <cstdlib>

using namespace std;

static void usage (char *porgname) {

cout << " Parameter nicht korrekt ";

exit(1);

}

static void error (char *progname, char **errorMessage) {

cout << " ERROR in " << " ue5.C " << errorMessage << endl;

exit(1);

}

int main (int argc, char *argv[]) {

cout << endl;

cout << endl;

FILE *datei;

char zeichen;

int zaehler = 0;

int n = atoi (argv[1]);

datei = fopen("text.txt", "r");

if (argc !=2) {

cout << " Fehler ";

}

datei = fgets(argv[1] != EOF);

{

zaehler++;

}

cout << " Die Datei enthält: " << zaehler << " Zeichen ";

fclose(datei);

}

Das Programm funktioniert aber leider nicht. Es kommt immer eine Fehlermeldung. Ich bin noch ein Anfänger in C++. Könnte mir jemand helfen.

Vielen Dank im Vorraus.

Folgendes Beispiel sollte die Größe der Datei eigentlich ermitteln:


  FILE * pFile;

  long size;


  pFile = fopen ("myfile.txt","rb");

  if (pFile==NULL) perror ("Error opening file");

  else

  {

    fseek (pFile, 0, SEEK_END);

    size=ftell (pFile);

    fclose (pFile);

    printf ("Size of myfile.txt: %ld bytes.\n",size);

  }

  return 0;

Ich würde gerne ein Programm schreiben, das die Anzahl der Zeichen in einer Datei zählt.
Sollst du wirklich zählen, oder reicht es, die Größe der Datei zu ermitteln?

#include <iostream>
Soweit OK.

#include <string.h>
Die Verwendung der C-Standardheader ist in C++ deprecated. Richtig müsste es <cstring> heißen. Du verwendest allerdings nichts aus diesem Header.

#include <fstream>
Du verwendest (warum auch immer) die C-Datei-API. Dafür brauchst du nicht <fstream> sondern <cstdio>. Ich würde aber empfehlen, das Programm von fopen auf fstream umzustellen.

static void usage (char *porgname) {

cout << " Parameter nicht korrekt ";

exit(1);

}

Diese Funktion wird gar nicht benutzt. Und selbst wenn sie benutzt würde, ist der Parameter unnötig. Und warum ist die Funktion static?

static void error (char *progname, char **errorMessage) {

cout << " ERROR in " << " ue5.C " << errorMessage << endl;

exit(1);

}

Siehe oben, Funktion wird nicht benutzt. Der Parameter progname auch nicht.

datei = fgets(argv[1] != EOF);
fgets liest Zeilen ein. Das ist nicht sonderlich sinnvoll, wenn du Zeichen zählen willst. Außerdem sollte das wohl eine Schleife sein.

Das Programm funktioniert aber leider nicht. Es kommt immer eine Fehlermeldung.
Und warum schreibst du nicht, wie die lautet? Warum muss jeder, der dir helfen will, erst selbst das Programm durch einen Compiler jagen?

Also ich hab mir mal gedacht ich frag mal ohne die Fehlermeldung dazuzuschreiben, weil vielleicht jemandem schon einfach im Programm was auffällt, aber die Fehlermeldungen lauten:

C++ forbids the comparison between pointer and integer.

Und dann noch eine zweite:

cannot convert 'bool' to 'char*' for argument '1' to char* fgets(char*, int, FILE*).

Geht so.

Toll, da geb ich mir mühe und du sagst nur "geht so". :D

Naja, theoretisch hätte ich einfach nur immer ein Zeichen bis EOF gelesen, aber ich weiß nicht, ob's vielleicht noch schneller geht.

Toll, da geb ich mir mühe und du sagst nur "geht so". :D
:floet:

Naja, theoretisch hätte ich einfach nur immer ein Zeichen bis EOF gelesen, aber ich weiß nicht, ob's vielleicht noch schneller geht.
Es gibt meist plattformspezifische Alternativen, unter Linux z.B. stat/fstat.

Das mit dem öffnen und lesen aus Datei hab ich hinbekommen, hab aber keine Ahnung wie ich das mit dem zählen der Zeichen machen soll. Könnte mir vielleicht jemand eine Anregung geben. Das wäre super. Vielen Dank im Voraus.

Danke dafür, aber leider hilft mir das nicht so weiter. Trotzdem danke.

Das hab ich jetzt probiert, aber da bekomme ich die Fehlermeldung: request for member 'get' in 'quellDatei', which is of non-class type 'FILE*'. Das bedeutet den das?

Den Code hab ich so probiert:

while (quellDatei.get() != EOF) {

++zaehler;

}

Das bedeutet den das?
Das bedeutet, dass du nicht meinem Rat gefolgt bist, das Programm auf fstream umzustellen.

Deswegen ist es auch wenig sinnvoll, wenn du nach Anregungen fragst, ohne den aktuellen Code zu zeigen. Dass du das Öffnen und Lesen "hinbekommen" hast, hilft uns nicht weiter, weil wir nicht wissen, wie du es hinbekommen hast.

Wenn du bei fopen bleiben willst, solltest du die Funktion fgetc benutzen.

Danke hab es hinbekommen. Jetzt hätte ich noch eine Frage: Wie würde das den aussehen wenn ich nicht die Zeichen zählen, sondern nach einem bestimmten Zeichen suchen will. Vielen lieben Dank.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.