Dateiinhalt in einen String lesen
-
Hallo zusammen,
ich möchte gerne den Dateiinhalt einer txt File mit C in einen String lesen, damit ich diesen nacher weiterverarbeiten kann. Anschliessend möchte ich diesen String nach einem bestimmten Teilstring durchsuchen. Irgendwie funktioniert das aber noch nicht so richtig. Obwohl der Teilstring existiert, ist das Ergebnis "NULL". Kann mir hierzu jemand helfen?
#include<stdio.h>
#include<stdio.h>
#include<conio.h>int main(int argc, char *argv[])
{
FILE *f;
char Text[10000];
int i;f = fopen("test.txt","r");
for(i=1;i<=10000;i++)
{Text[i]=fgetc(f);
}
char Such[]={"GE*"};
char* Ergebnis;Ergebnis=strstr(Text,Such);
printf("%s",Ergebnis);system("PAUSE");
return 0;
}
-
Kannst du mal ein Beispiel für den Ausschnitt zeigen, den du damit finden willst? Wenn du das * als Platzhalter verwenden willst: das klappt nicht. C sucht nur genau das, was da steht, inklusive Groß-, Kleinschreibung und Sonderzeichen. Suchen müsstest du alse nach "GE". Wenn davor nichts stehen soll, nach " GE", "\rGE" oder "\nGE" und den Dateianfang auch noch abfragen...
-
Das * ist kein Platzhalter, sondern gehört zur Zeichenkette. Die Zeichenkette in der Textfile lautet GE*
Danke für Eure Hilfe.
-
Wie lang ist test.txt? Länger als 10000 Zeichen? feof könnte vielleicht helfen. Hast du im Debugger mal geschaut, was in Text[] steht? Hat fopen überhaupt funktioniert?
-
Der Text ist auf alle Fälle kleiner als die 10000 Zeichen.
Ist die Übergabe des Dateiinhalts mit:
for(i=1;i<=10000;i++)
{Text[i]=fgetc(f);
}
überhaupt korrekt? Denn mit printf(Text) wird nichts ausgegeben.
-
-
Ein dicker fehler ist da drin.
Du musst das char-Array mit dem '\0'-char abschliessen sonst wird das nicht als String erkann.
-
Korrekt oder nicht korrekt, das ist hier gar nicht die Frage. 10000 mal fgetc aufzurufen ist auf keinen Fall sinnvoll. Mittels fseek() und ftell() lässt sich die Dateigröße ermitteln. Dann reservierst du mit malloc() entsprechenden Speicher und liest den Inhalt der Datei mit einem(!) fread()-Aufruf ein. Dieses Beispiel dürfte nützlich sein.
-
no_code schrieb:
Jetzt wirds klar...
Meine Hilfe zeigt zu fgetc() folgendes an:
#include <string.h> #include <stdio.h> int main(void) { FILE *stream; char string[] = "This is a test"; char ch; /* Datei für Aktualisierung öffnen */ stream = fopen("DUMMY.FIL", "w+"); /* einen String in die Datei schreiben */ fwrite(string, strlen(string), 1, stream); /* auf Dateianfang zurücksetzen */ fseek(stream, 0, SEEK_SET); do { /* ein Zeichen aus der Datei lesen */ ch = fgetc(stream); /* das Zeichen anzeigen */ putchar(ch); } while (ch != EOF); fclose(stream); return 0; }
Man beachte die Abfrage auf EOF, feof() würde auch gehen. Damit würd ich es mal versuchen.
Vermutlich fehlt deinem Text[] die Endterminierung, da du Text[] vollständig mit EOF füllst und das ist was anderes, als ein String-Ende. Dann wurschtelt strstr schön im Speicher rum...
-
Danke Euch allen für Eure Hilfe. Ich hab's nun mit dem Beispiel von Rab_Bit hinbekommen.
-
char Text[10000]; for(i=1;i<=10000;i++) { Text[i]=fgetc(f); } Ergebnis=strstr(Text,Such);
Das Problem ist, dass du <Text> erst ab dem 2.Zeichen füllst, die Suche aber beim 1.Zeichen beginnst. Wenn nun zufällig das 1.Zeichen von <Text> = '\0' ist, ist der String bei der Suche leer.