Text Console



  • Hallo,

    Wie es oben bereits steht habe ich vor eine eigene Text Konsole (keine eigene shell, eigene Konsole innerhalb der shell) entwerfen, die Vorgänge sind klar:

    1. Zur Eingabe auffordern.
    2. Text in Form von String entnehmen.
    3. Text nach Befehlen und deren flags untersuchen.
    4. Nach Erkennung eines Befehls etwas ausführen und die flags (Parameter) berücksichtigen.

    Ich kann mir den Algorithmus aber leider nicht wirklich vorstellen, wie die Konsole dann z.b. einen Befehl aus dem kompletten String erkennt, dann überprüft ob dieser Befehl Parameter mit sich bringt (diese sollten einfach ein oder mehrere Leerzeichen weiter vom Befehl selbst entfernt sein)
    und überprüft ob diese stimmen können...

    Wäre für hilfreiche Antworten sehr dankbar!


  • Mod

    Normalerweise konstruiert man das übrigens so, dass die Befehle ihre Kommandozeile verarbeiten und die Shell reicht sie nur durch. Wenn es dir da drum geht, dann guck dir mal die getopt-Bibliothek an, die das für dich erledigt (leider sehr C-ig 😞 ).

    Ansonsten: Was genau ist dein Problem? Einlesen kannst du doch sicher und dann zerlegst du einfach die Zeile in Tokens. Der erste Token ist de Befehl, alles was danach kommt, sind die Parameter.



  • SeppJ schrieb:

    Ansonsten: Was genau ist dein Problem?

    Das wohl größte Problem stellt für mich die Zerlegung eines kompletten Kommando-strings in einen Befehls-String und beliebig vielen flag-Strings dar, denn soetwas habe ich eigentlich noch nie gemacht





  • Michael E. schrieb:

    boost bietet da was Nettes: http://www.boost.org/doc/libs/1_48_0/doc/html/program_options.html

    Ich bin nicht so der Fan von Fremdbibliotheken, sollte eher was C++ natives sein...



  • Was meinst du mit "etwas C++ nativem"? Boost ist nach der Standardlib die C++-Bibliothek. Aus ihr kommen auch die meisten Neuerungen der Standardlib.



  • Michael E. schrieb:

    Was meinst du mit "etwas C++ nativem"? Boost ist nach der Standardlib die C++-Bibliothek. Aus ihr kommen auch die meisten Neuerungen der Standardlib.

    Ok das hätte ich nicht gewusst, ist es die native Erweiterung der Standardbibliothek oder wie soll ich das verstehen?

    Muss es nachinstalliert werden? (wenn ja dann ist es bereits eine schlechte Wahl)

    Was macht boost aus?

    Ich höre ehrlich gesagt das erste Mal davon...


  • Administrator

    RussianTux schrieb:

    Ok das hätte ich nicht gewusst, ist es die native Erweiterung der Standardbibliothek oder wie soll ich das verstehen?

    Was verstehst du unter "native"? Es ist eine weit verbreitete Bibliothek, welche zusammen mit C++ verwendet wird. Wenn du ein Android Handy hast, dann kannst du z.B. mal unter Lizenzen suchen gehen, sogar dort findest du die Boost Bibliothek 😉

    RussianTux schrieb:

    Muss es nachinstalliert werden? (wenn ja dann ist es bereits eine schlechte Wahl)

    Klar, wie alle Bibliotheken. Du musst auch die Standardbibliothek auf dem Zielsystem installieren. Ausser du linkst gegen alle Bibliotheken statisch, was afaik auch mit der Boost Bibliothek gehen würde. Aber das macht eigentlich niemand.

    RussianTux schrieb:

    Was macht boost aus?

    Zahlreiche hilfreiche zusätzliche grundsätzliche Funktionalitäten für C++. Schau dir einfach mal das Angebot durch:
    http://www.boost.org/libs/libraries.htm

    RussianTux schrieb:

    Ich höre ehrlich gesagt das erste Mal davon...

    Dann hast du wahrscheinlich noch nicht viel mit C++ zu tun gehabt 😉

    Aber du kannst das gerne auch auf eine einfache Art und Weise mit den Mitteln aus der Standardbibliothek schreiben. Lies eine Zeile ein, finde z.B. die Leerzeichen und splitte die eingelesene Zeile auf. Danach könntest du eine map verwenden mit den Kommandos als Schlüssel und als Wert z.B. einen Funktionszeiger.

    typedef void (*command_type)(std::vector<std::string> const&);
    typedef std::map<std::string, command_type> command_map;
    

    Grüssli


Anmelden zum Antworten