Frage von sunshineeee, 24

C- Wortweises einlesen aus Datei?

Hallo!

Ich versuche mich zur Zeit am Programmieren in C. Nun komme ich an einer Stelle nicht mehr weiter.

Es geht um einlesen von Dateien. Ich möchte nun aus einer Datei die einzelnen Worte lesen und dann in einem Array speicher. Jedoch weiß ich vorher nicht wie lang, wie groß und welche anzahl von Worten bzw Zahlen die Datei enthält. Ich weiß nur das die einzelnen Zahlen bzw Worte durch Leerzeichen,Tabulator oder Zeilenumbruch getrennt sind.

Jetzt hab ich mir schon die einzelnen Funktionen angeschaut, also fscanf, fgetc, fgets und so, aber habe immer noch keine Idee wie ich das machen könnte.

Danke schonmal für eure Antworten.

Antwort
von PWolff, 5

Sollt ihr die erweiterten Fähigkeiten von C++ zu schätzen lernen?

Meine erste Überlegung war ein Three-Pass-Algorithmus, aber das wäre vermutlich Overkill.

Folgendes müsste funktionieren - ist aber immer noch ein Two-Pass-Verfahren:

- Allozieren eines Byte-Arrays mit der Größe (Größe der Datei + 1)

- Durchgehen der Datei, hierbei Zählen der Worttrenner (hierbei kann berücksichtigt werden, ob leere Wörter mitgenommen werden sollen oder nicht); Inhalt der Datei in das Byte-Array schreiben (plus Null-Byte in die letzte Stelle, falls das letzte Zeichen kein Worttrenner ist)

- Aus Anzahl der Worttrenner und daraus, ob das letzte Zeichen der Datei ein Worttrenner ist oder nicht, die Anzahl der Wörter berechnen

- Allozieren eines Arrays von Pointer auf Character mit Größe (Anzahl der Wörter)

- Durchgehen des Byte-Arrays, die Positionen der Wortanfänge in das Pointer-Array schreiben und die Worttrenner durch Null-Bytes ersetzen

Antwort
von Balco, 12

Ich habe schon lange nicht mehr mit C programmiert, kann dir also leider nicht detailliert darauf antworten. Versuch jedoch mal den ganzen Dateiinhalt in eine Variable einzulesen, danach diese Variable in einen Array aufspalten.

Ich weiss leider nicht genau, wie das in C geht, in anderen Programmiersprachen gibt es dazu jedoch die Funktionen explode() oder split().

Kommentar von sunshineeee ,

Darüber habe ich auch schon nachgedacht, jedoch sehe ich da das Problem, dass ich ja nicht weiß wie groß die datei ist

Kommentar von PWolff ,

Die Größe der Datei ist dem System bekannt - aber ähnlich wie Balco müsste ich mich selbst auch erst mal schlau machen, wie diese Funktion in C heißt und in welcher Bibliothek sie ist.

Kommentar von Balco ,

Ich kenn mich leider wirklich überhaupt nicht mit C aus, aber habe das hier im Internet gefunden:

#include <stdio.h>
#include <stdlib.h>

FILE *f = fopen("textfile.txt", "rb");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
fseek(f, 0, SEEK_SET); //same as rewind(f);

char *string = malloc(fsize + 1);
fread(string, fsize, 1, f);
fclose(f);

string[fsize] = 0;

Und um diesen String dann aufzusplitten sollte dir die Funktion strtok() weiterhelfen.

Alle Angaben ohne Gewähr ;)

Keine passende Antwort gefunden?

Fragen Sie die Community