Ausgabe umleiten: BS -> Datei, Datei -> BS



  • Hallo,

    in meinem Projekt wird Output erzeugt, der bisher einfach über cout auf dem Bildschirm landet. Ich möchte nun folgende Funktionalität hinzufügen. Ein Kommandozeilenparameter möge angeben, ob die Ausgabe auf dem Bildschirm oder in eine Datei erfolgen soll. Wie kann ich das am besten realisieren?

    Mein naiver Ansatz lautet:

    Ich erzeuge ein ofstream-Objekt, sagen wir fout. Bei jeder Ausgabe erscheint ein switch-statement, das anhand des Kommandozeilenparameters die Ausgabe tätigt. Eben auf fout (File) oder cout (BS).

    Das scheint mir jedoch etwas kompliziert.
    Wäre für eure Hilfe dankbar.

    Gruß,
    Göbel



  • Du legst ein ostream* Objekt an.
    Am Anfang der Anwendung wird der Zeiger entweder auf cout oder einen ofstream gebunden 🙂



  • Danke, aber die Umsetzung ist noch nicht ganz klar.

    ostream* output // Zeiger auf ein ostream-Objekt
    ofstream fout // ofstream-Objekt

    Meine Frage: Wie binde ich nun den Zeiger an fout bzw. cout?
    Und wie erfolgt dann die Ausgabe mit dem ostream*?

    Weitere Frage: Warum verwende ich einen Zeiger auf das ostream-Objekt?

    Danke,
    Göbel



  • ausgabe auf bildschirm:

    std::cout << "hallo" << std::endl;
    

    ausgabe in datei:

    system("copy c:\\ d:\\ >>datei.txt");
    


  • horc schrieb:

    Meine Frage: Wie binde ich nun den Zeiger an fout bzw. cout?

    Kennst du dich mit Zeigern aus? Wenn nein, lies mal schnell nach.

    ostream* out=&cout;

    Und wie erfolgt dann die Ausgabe mit dem ostream*?

    (*out)<<"hallo";

    Weitere Frage: Warum verwende ich einen Zeiger auf das ostream-Objekt?

    Du kannst den Zeiger global deklarieren, jeder hat somit zugriff.

    nun weißt du zur compiletime aber nicht, ob du die ausgabe in eine datei, oder auf die konsole machst, du weißt es erst zur runtime. Mit dem Zeiger kannst du zur runtime den zeiger erst auf einen konkreten stream binden.

    das ist soweit ich sehe die einfachste möglichkeit für dich.



  • Shade Of Mine schrieb:

    nun weißt du zur compiletime aber nicht, ob du die ausgabe in eine datei, oder auf die konsole machst, du weißt es erst zur runtime. Mit dem Zeiger kannst du zur runtime den zeiger erst auf einen konkreten stream binden.

    das ist soweit ich sehe die einfachste möglichkeit für dich.

    Besten Dank @Shade Of Mine.
    Zeiger machen mir bisweilen Probleme 🙂 , aber nun ist's klar. Der Hinweis -> Runtime hat bei mir Klarheit geschafft. Damit kann ich nun von meinem naiven Ansatz Abstand nehmen.

    Greets,
    Göbel


Log in to reply