Auslesen von Text-Datei mit fopen und fgetc



  • Hallo Zusammen,

    ich bin ein C-Neuling und versuche mich gerade in C. 😕
    Leider konnte ich bei meinem derzeitigen Problem keinerlei Einträge in Foren finden und hoffe daher, dass Ihr mit helfen könnt.
    Ich versuche eine Datei auszulesen und den Inhalt auf ein bestimmtes Wort abzufragen.
    Ich kann die Datei auch öffnen, auslesen einzig die Ausgabe des Inhaltes der Datei auf dem Schirm (mit printf) klappt noch nicht.
    Die Ausgabe mit putc(,stdout) hingegen schon.
    Hier mal ein Ausschnitt meines bisherigen Werkes...

    char c_Einlesen;
    char test2;
    (etc.)
    if ((File = fopen("C:\\TEMP\\test.txt", "r")) != NULL)   //Datei im aktuellen Verzeichnis öffnen
        {
    	    while ((c_Einlesen=fgetc(File)) != EOF) //Daten bis zum Ende einlesen
    		putc(c_Einlesen, stdout);
    		fclose(File);
    	}
    		test2 = c_Einlesen; 
                    printf("\nTEST %c", (c_Einlesen));
    

    Wie kann ich nun die in c_Einlesen enthaltenen Zeichen mit einer Test-Zeichenfolge vergleichen? (Also Schritt für Schritt durchgehen?)
    Und warum erscheint bei printf("\nTEST %c", (c_Einlesen)) immer ein Fehler?:(
    Danke schon mal für Eure Hilfe,

    Grüße,

    Ramses



  • EOF muss doch mit einem Integer verglichen werden?!



  • Wenn du uns jetzt noch sagst, welcher Fehler kommt, dann erhöhen sich deine Chancen auf Hilfe drastisch.



  • Hallo zusammen,

    @Xantus:
    Vielleicht habe ich mich ein wenig falsch ausgedrückt. Eigentlich erscheint bei

    printf("\nTEST %c", (c_Einlesen));
    

    kein Fehler. Es erscheint nur das Wort "TEST" auf dem Schirm und sonst nichts!
    Aber ich würde gerne die Zeichenfolge vor dem Vergleich ausgeben, um zu sehen was er aus der Datei eingelesen hat...

    @Gamester:
    Was meinst Du mit Vergleich mit Integer? Ist die NULL fehlerhaft? Das Einlesen hat zumindest keine Fehlermeldung verursacht, auch wenn ich nicht weiß, ob oder was eingelesen wurde (siehe oben).

    Danke schon mal.



  • Schau mal genau hin: Du hast eine Schleife, die so lang läuft, bis c_Einlesen EOF enthält. Dabei wird in jedem Durchlauf ein Zeichen gelesen und auf den Schirm ausgegeben. Nach der Schleife gibst Du nochmal c_Einlesen aus, welches - richtig! - EOF enthält, da das die Abbruchbedingung für die Schleife ist. Würde c_Einlesen nicht EOF enthalten, würde die Schleife immernoch laufen.

    Aber davon abgesehen glaube ich irgendwie, dass Dir nicht klar ist dass ein char genau ein Zeichen enthalten kann, denn die Fragestellung hört sich so an, als versuchst Du, die gesamte Datei in ein Zeichen zu quetschen (was Dir als Kompressionsalgorithmus sicher einen Nobelpreis einbringen würde, wenn er umkehrbar wäre :D)



  • @LordJaxom:
    Vielen Dank für den Hinweis!
    (Dachte echt, dass ich eine Folge von Zeichen herausbekomme! 😉
    Habe jetzt auch ein paar Zielen verändert und mein Ergebnis sieht nun so aus:

    ...
    while ((c=fgetc(File)) != EOF) //Daten bis zum Ende einlesen
    		{
    
    			c= fgetc(File);
    			c_Einlesen[n] = c; 			
    
    			printf("\n n: %i", n);
    			printf("\n out: %c", *(c_Einlesen+n));
    			n++;
    		}
    		fclose(File);
    ...
    

    Jetzt würde ich noch gerne einzelne Wörter (nicht Zeichen) die durch Leerzeichen getrennt sind erkennen und durch ein anderes Wort ersetzen.
    Hier mal ein Beispiel: aus "Dies ist ein TEST" soll werden "Dies sei ein Ergebnis".
    Wie kann ich das ganze nun in komplette Wörter packen und diese vergleichen.
    Ich habe mir das so gedacht, dass ich deklariere:

    char *test[]={"TEST"};
    

    und dann unten sage:

    if(test[k]==c_Eingabe[i])
    	{
            //mach irgendwas
            }
    

    Geht das irgendwie?



  • ja, du suchst mit strstr bis "TEST", verkürzt den String auf "Das ist ein" und hängst mit Strcat ein "Ergebnis" hinten dran. Aber vergiss nicht, den Buffer groß genug zu halten 😉



  • Hi,

    sorry Xantus, dass ich mich erst jetzt melde, aber ich war die Tage im Stress. 😞
    Werde die Sache mal probieren und mich wieder melden!
    Grüße aus dem heissen Frankenland,

    Ramses


Anmelden zum Antworten