Dateiname als Variable einlesen und daraus lesen:(



  • ich denk mal das liegt am prototyp von getc

    int getc(FILE *stream);
    

    gruessle TDO



  • meckert77 schrieb:

    Danke für die Tipps. Aber so komme ich nur auf einen Fehler beim Compilieren.

    PrintAscii.cpp(29) : error C2440: '=' : 'int' kann nicht in 'char [256]' konvertiert werden
    Es gibt keine Konvertierungen von Arraytypen, obwohl es Konvertierungen von Verweisen oder Zeigern in Arrays gibt
    Fehler beim Ausführen von cl.exe.

    NachSP6.exe - 1 Fehler, 0 Warnung(en)

    Was will mir der Compiler sagen ?????

    Wie gesagt deine Variable NAME darf KEIN Array sein. Das hat also von Anfang an gestimmt. Nur deine Variable DATEI musste zu einem Array gemacht werden.



  • Danke für eure Antworten. Bin mit der gesamten Hilfe zur folgenden Lösung gekommen. Falls es Tipps und Tricks zur Verbesserung gibt gern 😉

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
      char name;
      FILE *fz;
      char datei[FILENAME_MAX];
    
      printf("Dateiname: ");
      fgets(datei, FILENAME_MAX, stdin);
    
      datei[strlen(datei) - 1] = '\0'; /* Steuerzeichen '\n' von fgets() durch '\0' ersetzen */
    
      if ((fz = fopen(datei, "r")) == NULL) {
        printf("ERROR: Datei nicht lesbar oder nicht vorhanden.\n");
        return 0;
      } else {
        name = getc(fz);
        while(name != EOF) {
          printf("%c", name);
          name = getc(fz);
        }
        fclose(fz);
      }
      return 0;
    }
    

    MFG

    Meckert



  • Ja, ich hab da noch einen Verbesserungsvorschlag.
    Wenn du schon einen Fehler meldest, dann solltest du auch in deinem return() einen Fehlercode zurückliefern, also eine andere Zahl als 0, denn 0 gillt allgemein als erfolgreiche und korrekte Ausführung des Programms.



  • Hi, hab mal eine Frage zu den Programm. Da wir auch sowas in der Art programmieren sollen.
    "...
    char datei[FILENAME_MAX];
    ..."

    Für was steht jetzt das Filename_may genau? für ein Feld von 256 Zeichen?



  • FILENAME_MAX ist einfach eine Konstante die zur Compilezeit eingesetzt wird. Die kann 256 sein, aber auch anders. Je nach Plattform für die kompiliert werden soll.



  • @Walli besten Dank... Wieder eine Wissenslücke geschlossen 🙄

    So ich hab mir mal den Code als Gerüst genommen und wollt jetzt was verändern. Der Compiler bringt keinen Fehler, aber das Resultat stimmt auch nicht.
    Ich will eine Datei übergeben und ein Zeichen, innerhalb der Datei soll dann die Anzahl des übergebenen Zeichens ermittelt werden und am Ende den Benutzer am Bildschirm präsentiert werden. Funzt aber nicht 😕 Bekomm immer 0 zurück auch wenn ich eine Datei mit Textinhalt übergebe.

    http://www.htw-dresden.de/~s53772/open.c



  • Wenn du diesen Codeabschnitt korrigierst läuft es:

    while(name != EOF) //solange nicht das Ende erreicht ist, End of File
    	{
    		if (zeichen == name)
    				anzahl++;
    
    		name = getc(meine_datei);
    
        }
        fclose(meine_datei); //Schließt die Datei wieder
    

    Du vergleichst Adressen, was nicht wirklich zum Erfolg führt:

    if (&zeichen == &name)
    

    Bei char kannst du doch sofort auf Gleichheut (==) prüfen. Aber immer daran denken: bei strings auf alle Fälle

    strcmp(string1, string2);
    

    !



  • Es geht 🙂
    besten Dank... 🙂

    So da ich ja den Code etwas "gestohlen" habe, ist mir etwas noch nicht ganz klar.

    "datei[strlen(datei) - 1] = '\0'; /* Steuerzeichen '\n' von fgets() durch '\0' ersetzen */"
    <--Wozu brauch ich diese Anweisung?



  • Weil sonst ein Zeilenumbruch (\n) am Ende des Strings steht (da fgets() einen String immer inklusive Newline-Zeichen ließt), wodurch die Datei nicht geöffnet werden könnte, da die Namen nicht übnereinstimmen. Jeder "normale" String wird mit einem \0 abgeschlossen, und mit dieser Anweisung wird das \n durch \0 überschrieben.

    Ach übrigens, was studierst du an der HTW? Bin nämlich auch ein HTW-Studie! :p



  • @Richard

    besten Dank, jetzt hab ich endlich alles verstanden 🙂 Feine Sache...
    Wie man an der s... Nummer sieht bin ich im 2. Semester als Wirtschaftsinformatiker tätig 😉 Und selber?

    Wie klein die Welt doch ist!



  • Ebenfalls 2tes, allerdings schimpf ich mich allgemeiner Informatiker.

    Schönes WE noch!


Anmelden zum Antworten