[C/C++] EOF abfangen bei einlesen einer Datei

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Leon, 27. November 2008 .

  1. 27. November 2008
    EOF abfangen bei einlesen einer Datei

    Hallo, ich mal wieder

    Habe gerade folgendes Problem:
    Lese in linux per Stream also z.b.: ./a.out < daten.txt ein paar Daten ein.
    Das Problem ist nur wenn die Datei leer ist komme ich in eine Endlosschleife , da das EOF nicht beachtet wird.
    Eingelesen wird mit fgets().
    Wie kann wird das EOf in einen String geschrieben und wie kann ich es abfragen wenn es aus einer Datei übergeben wird?
    schonmal vielen Dank im voraus.

    mfg
    Leon
     
  2. 27. November 2008
    AW: EOF abfangen bei einlesen einer Datei

    Ich kann mich dunkel daran erinnern, dass das EOF in einer Textdatei mit \# dargestellt wird. Vllt kannst du den Ausdruck abfangen ...

    bzw. kannst du in c++ explizit den EOF abfragen ... habe mal selbst so etwas in der schule programmiert ... hier ein Teil des Quellcodes:

    Die Bedingung im while-Ausdruck ließt ein Zeichen aus und fragt dieses direkt ab, ob es das EOF ist. Probiers eifnach mal, vllt funktioniert es auch in deinem Fall
     
  3. 27. November 2008
    AW: EOF abfangen bei einlesen einer Datei

    hmm, ich lese ja nicht aus einer Datei aus sondern leite die Daten der Datei in den STDIN Stream um.
    Hab jetzt auch eine Lösung gefunden:
    Code:
    char *eofPruefer; 
    eofPruefer=fgets(eingabe,49,stdin); /* Einlesen des Char Arrays eingabe */ 
    if(eofPruefer==NULL) exit(EXIT_SUCCESS);
    
    Leider ist da jetzt ein Zeiger drin und das möchte ich gerne unterbinden, geht das irgendwie?
    Schonmal danke im voraus.
     
  4. 28. November 2008
    AW: EOF abfangen bei einlesen einer Datei

    Wenn du diese Lösung verwenden möchtest kannst du das nicht unterbinden, da fgets sich eine Zeile aus deiner Datei holt und diese in einen String speichert und ein String is ein Char Feld. Auf so ein Char Feld greifst du aba nur mit einem Zeiger zu (geht ja nicht anders).

    Du könntest eine leere Datei so abfangen, dass du beim Aufruf folgendes machst:
    Code:
    
    FILE *file_pointer;
    char ch;
    
    ch = fgetc(file_pointer);
    if (c = getchar()) != EOF )
    {...}
    
    somit kannst du eine leere Datei abfangen, da du das erste Zeichen einliest und wenn das gleich EOF ist kannst du die Datei ja gleich wieder schließen.

    mfg duddl


    Links:
    http://www.ratiosoft.com/lint/eof_.htm
    C Referenz -fgetc/getc Funktion-
     
  5. 29. November 2008
    AW: EOF abfangen bei einlesen einer Datei

    hmm, ich glaube ich werde missverstanden,
    Ich lese aus STDIN ein, nun leite ich die Daten einer Datei in Linux mit "<" in das Programm weiter.
    Wenn die Datei jedoch leer ist , ist gleich das EOF da, also muss ich testen ob in dem Char Array eingabe EOF drin ist.
    Jedoch hab ich leider keine Möglichkeit ohne Zeiger gefunden um dies zu realisieren.
    Vielleicht hat ja noch jemand von euch eine Alternative zur Hand.
     
  6. 30. November 2008
    AW: EOF abfangen bei einlesen einer Datei

    Warum willst du denn unbedingt ohne Zeiger proggen? Zeiger sind in C ein hauptbestandteil, um die man (zumindest bei größeren Programmen) nicht herumkommt.
    Weiters hab ich noch immer nicht ganz verstanden, was du möchtest.
    Du liest die Daten aus STDIN ein. Wohin? Kommen die in eine Datei, oder in eine Variable? Anschließend leitest du Daten aus einer Datei in dein Programm weiter.
    Korrigier mich bitte, wenn ich das immer noch nicht ganz gecheckt hab.

    mfg duddl
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.