2010-06-22 3 views
2

J'ai rencontré le problème suivant: Mon utilitaire de console devrait fonctionner en tant que processus (j'espère que c'est le bon terme) de sorte que chaque commande y soit directement envoyée. Comme gnuplot, des coquilles interactives (irb, etc.).Coquille interactif personnalisée

Cela montre ce dont je parle:

Mikulas-Dites-Mac-2:Web rullaf$ command 
Mikulas-Dites-Mac-2:Web rullaf$ irb 
>> command 
NameError: undefined local variable or method `command' for main:Object 
    from (irb):1 
>> exit 
Mikulas-Dites-Mac-2:Web rullaf$ 

premier command est exécuté comme commande shell, mais après j'entre irb, ce n'est pas. Tu obtiens le point.

irb met la console dans un mode spécial, ou simplement analyse l'entrée elle-même dans une boucle? Est-ce qu'il y a un moyen de créer un tel comportement en C++? Merci

+0

Je ne comprends pas votre question. Vous voulez capturer l'entrée de la console dans votre programme C++? Pourquoi parlez-vous d'irb? – neuro

+0

@neuro Irb était simplement un exemple de comportement dont je parle et n'a rien à voir avec ma question. –

Répondre

2

Vous devez analyser l'entrée vous-même. Selon la complexité de l'entrée, cela peut être accompli par une simple chaîne de caractères correspondant à des cas triviaux. Un exemple très simple:

#include <iostream> 
#include <string> 

int main() 
{ 
    std::string input; 
    for(;;) 
    { 
    std::cout << ">>"; 
    std::cin >> input; 
    if(input=="exit") 
     return 0; 
    else if(input=="test") 
     std::cout << "Test!\n"; 
    else 
     std::cout << "Unknown command.\n"; 
    } 
} 

De toute évidence, ce petit programme imprimera une invite (>>) et comprendre les commandes exit et test et imprimera Unknown command. sur toutes les autres commandes.

Pour tout le reste, vous voulez probablement en savoir plus sur la correspondance ou l'analyse de modèles; Google est votre ami (jetez un oeil à bison par exemple et un bon tutorial).

+0

Merci, c'est une solution évidente, mais je voulais avoir des commandes plus compliquées - avec un nombre dynamique de paramètres, etc. De toute façon, je suppose que je vais devoir l'écrire moi-même. –