Text aus einer Konsole auslesen



  • Hallo,

    mein Problem:
    Ich habe eine stink normale Konsole vor mir...zB von einem Hallo Welt Programm vor mir.
    In diesem Fall ist es ein Server, der Statusmeldung ausgibt.
    Nun würde ich gerne den Text auslesen.
    Also das Hallo Welt in der Konsole zB in eine Variable oder so speichern.


  • Mod

    Die meisten Konsolen unterstützen das Umleiten der Ausgabe von Programmen an andere Programme. Dann kannst du das in deinem Programm einfach über die Standardeingabe lesen (cin). Das ist also eher eine Sache, wie du deine Programme aufrufst. Dies ist die übliche und weit verbreitete Lösung für diese Problemstellung.



  • Ja oke, aber wie realisiere ich das?
    Also mal zur veranschaulichung.

    Das ist jetzt der Server mit einer Statusmeldung:

    #include <iostream>
    
    int main() {
    
        std::cout << "5644\n";
    
        return 0;
    
    }
    

    Und jetzt soll mein Programm die Meldung auslesen:

    #include <iostream>
    
    void readStatus() {
    
        int status = 0;
    
        // Status auselsen...
    
        cout << status << endl;
    
    }
    
    int main() {
    
        readStatus()
    
        // Weitere Funktionen...
    
        return 0;
    
    }
    

    Wie sieht jetzt die Funktion readStatus() aus?


  • Mod

    cin >> status;



  • Ich glaube du hast die Frage falsch verstanden...
    Der server ist eine Konsole mit Text.
    Jetzt schreib ich mein Programm, dass diesen Text ausließt...
    cin >> status würde ja eine Benutzereingabe fordern.
    Das Programm soll den Text aus einer Konsole eines ANDEREN Programms lesen und verarbeiten.

    //EDIT

    Ok, versuch ich das mal anders zu erklären:

    Ich habe einen Game-Server. Davon hab ich kein Quellcode, und kein Einfluss usw., da der Server nicht von mir ist und ich auch kein Recht habe, irgendwas zu verändern.
    Aufjeden Fall möchte ich nun den Status des Servers auslesen.
    Ich möchte ein Programm zur erleichterten Bedienung schreiben.
    Wenn zum Beispiel ein Spieler dem Server beitritt heißt es:
    Spieler x ist dem Spiel beigetreten.
    Nun möchte ich zb eine Tabelle mit allen Spielern machen.
    Dafür muss ich aber erstmal diese Meldung auslesen.
    Der Text steht wie bei einem kleinen Hallo Welt Programm in einer normalen Konsole...
    Wie lese ich den Text aus der Konsole aus??? 😕


  • Mod

    PAiNTiNG schrieb:

    Ich glaube du hast die Frage falsch verstanden...

    Doch habe ich, du liest nur meine Antworten nicht richtig. 🙂

    Der server ist eine Konsole mit Text.
    Jetzt schreib ich mein Programm, dass diesen Text ausließt...
    cin >> status würde ja eine Benutzereingabe fordern.

    Nö, wie kommst du darauf? cin liest von der Standardeingabe.

    Das Programm soll den Text aus einer Konsole eines ANDEREN Programms lesen und verarbeiten.

    Kein Problem, wenn du die Ausgabe des einen Programms zur Standardeingabe des anderen Programms machst. Das gehört eigentlich zu den Grundkonzepten der Konsolenbedienung, daher wundert es mich, dass du das nicht kennst. Wie das genau geht, kommt natürlich auf die Konsole an, bei den meisten geht das mit dem | Zeichen.



  • Ah okay, sry hab ich aber echt noch nie von gehört... 😮
    Da ich davon ja noch nie gehört hab, wie mach ich den die andere Konsole zur Standardeingabe? Könntest du mal als Beispiel zeigen? 😋



  • Beispiel in der Windows-Konsole (nicht ausprobieren!):

    echo J | del C:\Windows\System32\*
    

    Das 'J', die Ausgabe von echo, wird zur Standardeingabe von del und beantwortet die "Sind sie sicher?"-Frage. Natürlich hätte man auch dem Parameter /q nehmen können, aber ich wollte das Prinzip deutlich machen.

    Wenn du jetzt ein Programm int i; cin >> i; cout << i*2; hast und dieses mit echo 123 | meinprogramm aufrufst, wird 246 ausgegeben werden.



  • Ja oke das klappt schon gut. Das muss jetzt aber noch zur laufzeit des Programms passieren. Wenn ich das so wie beschrieben mache, startet er es nur...



  • Eine sehr einfach Lösung in solchen Fällen: du leitest die Ausgabe des gestarteten Programms in eine Datei um:

    dir > datei.txt
    

    Anschließend kannst du datei.txt auslesen.

    Die "hübsche" Lösung ist platformabhängig, Stichwort unter Windows wäre Pipes.


Anmelden zum Antworten