[SYS2] Shell

Voir le sujet précédent Voir le sujet suivant Aller en bas

resolu [SYS2] Shell

Message  sawaka le Mar 27 Mar 2012, 21:49

Hello,

Ça fait un petit moment que je me torture l'esprit avec mon projet de système, j'ai fait plusieurs version en repartant depuis le début mais rien n'y fait je n'arrive absolument pas à avoir le même résultat qu'un vrai shell. Le but de mon projet est la prise en charge des doubles quotes.

A chaque solution que je trouve, soit j'ai un problème quand je met un espace au debut de la quote, soit quand j'en met pas, donc voila, si quelqu'un pouvais me donner une piste pour la logique, ça m'aiderais beaucoup.

Merci !


Dernière édition par sawaka le Mer 28 Mar 2012, 16:23, édité 1 fois

sawaka

Nombre de messages : 11
Prénom : Aziz
Date d'inscription : 13/01/2012

Revenir en haut Aller en bas

resolu Re: [SYS2] Shell

Message  mba le Mar 27 Mar 2012, 22:00

sawaka a écrit:Hello,

Ça fait un petit moment que je me torture l'esprit avec mon projet de système, j'ai fait plusieurs version en repartant depuis le début mais rien n'y fait je n'arrive absolument pas à avoir le même résultat qu'un vrai shell. Le but de mon projet est la prise en charge des doubles quotes.

A chaque solution que je trouve, soit j'ai un problème quand je met un espace au debut de la quote, soit quand j'en met pas, donc voila, si quelqu'un pouvais me donner une piste pour la logique, ça m'aiderais beaucoup.

Merci !
ton post est bien imprécis :

le même résultat ... j'ai un problème ...

difficile de se faire une idée.

mba

Nombre de messages : 1493
Statut : prof
Localisation : Lessines
Date d'inscription : 07/10/2006

Revenir en haut Aller en bas

resolu Re: [SYS2] Shell

Message  sawaka le Mar 27 Mar 2012, 22:11

Justement ce qui m'aurait aidé serait juste une piste pour comprendre de quel manière procéder dans la logique. Ayant tout recommencer j'ai imaginer cette solution plutôt simple :

Code:

   while (strcmp(ligne, "exit\n")) {
      i = 0;
      tokens[i] = strtok(ligne, " \n");
      while (tokens[i] != NULL) {
         if (strchr(tokens[i], '\"')) {
            //Prend la suite jusqu'a la prochaine quote
            *(tokens[i] + strlen(tokens[i])) = strtok(NULL, "\"");
            //Supprime la premiere quote
            tokens[i] = tokens[i] + 1;
         }
         tokens[++i] = strtok(NULL, " \n");
      }

Il prend bien en compte les espaces dans les echo et ls mais il y a parfois des caractères inconnu (comme le \28 ou \25) qui se glissent, je comprend pas tout à faire d'où ils peuvent venir.

Exemple :

Code:

$Shell:G33252 >  echo "test"
test"
$Shell:G33252 >  echo " test"
test
$Shell:G33252 >  echo " t  e    s    t "
t  e    s    t
$Shell:G33252 >  ls " fichier"
ls: $Shell:G33252 >  impossible d'accéder à fichier: Aucun fichier ou dossier de ce type

J'avais aussi une autre méthode avant qui avait comme problème de prendre en compte tous les espaces, même sans les quotes. Alors devrais-je garder mon idée plus haut qui est assez courte ou reprendre mon autre code et manuellement supprimer tous les espaces en dehors des quotes, ce qui serait assez lourd... Donc voila, je suis perdu sur ce que je devrais faire.

sawaka

Nombre de messages : 11
Prénom : Aziz
Date d'inscription : 13/01/2012

Revenir en haut Aller en bas

resolu Re: [SYS2] Shell

Message  mba le Mar 27 Mar 2012, 23:25

Je crois comprendre ce que tu veux faire, mais j'ai du mal à le retrouver ici :
//Prend la suite jusqu'a la prochaine quote
*(tokens[i] + strlen(tokens[i])) = strtok(NULL, "\"");
//Supprime la premiere quote
tokens[i] = tokens[i] + 1;

et si tu pouvais garder le contrôle sur la chaîne examinée ?
Je crois comprendre également que en utilisant strsep à la place de strtok tu peux avancer le pointeur toi même, car la chaine est passée en paramètre à chaque appel.

Ceci dit, le problème est plus un problème de C que de système :-)
A tester (demain ...)

mba

Nombre de messages : 1493
Statut : prof
Localisation : Lessines
Date d'inscription : 07/10/2006

Revenir en haut Aller en bas

resolu Re: [SYS2] Shell

Message  mba le Mer 28 Mar 2012, 00:02

une autre idée à tester serait de faire l'analyse de ligne en plusieurs fois :

une première fois avec délimiteurs "\"\n" , avec un peu (beaucoup) de chance, les parties entre "" seront aux indices impairs (1,..) de ton tableau (à tester).

reste plus qu'à créer un deuxième tableau en utilisant le strtok classique sur chaque élément en indice pair et alterner avec les éléments d'avant ...

Mais il n'est pas bon de penser à tout ça aux petites heures ... on risque de divaguer

PS. reste plus qu'à : j'emprunte là une expression typique du langage des ingénieurs, en fait la vraie expression est "il n'y a plus qu'à", et ceci en général revient à dire qu'il y a là un travail de la portée de "5 hommes an"... Tu seras peut-être confronté à cela dans ta brillante future carrière

mba

Nombre de messages : 1493
Statut : prof
Localisation : Lessines
Date d'inscription : 07/10/2006

Revenir en haut Aller en bas

resolu Re: [SYS2] Shell

Message  pbt le Mer 28 Mar 2012, 10:02

Pouvez-vous utiliser les expressions régulières en C ? Il existe une bibliothèque pour ça (regex)

Si oui, ça devrait te simplifier le travail ...

(Attention, je n'ai plus fait de C depuis longtemps)

_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

resolu Re: [SYS2] Shell

Message  sawaka le Mer 28 Mar 2012, 16:20

Merci pour vos réponses. C'est vrai qu'avec les expressions régulières je devrais beaucoup mieux m'en sortir, je vais tester ça Smile

sawaka

Nombre de messages : 11
Prénom : Aziz
Date d'inscription : 13/01/2012

Revenir en haut Aller en bas

resolu Re: [SYS2] Shell

Message  michaelvd le Jeu 29 Mar 2012, 09:56

pbt a écrit:Pouvez-vous utiliser les expressions régulières en C ? Il existe une bibliothèque pour ça (regex)

Si oui, ça devrait te simplifier le travail ...

(Attention, je n'ai plus fait de C depuis longtemps)

Si regex (logiquement) est sur linux2, et sur les machines mandriva du 5ième, je pense que les profs système seraient ok pas rapport à ca.. Je pense que c'est une bonne idée pour ce genre cas. Je vais tester mon projet avec ca demain Smile

michaelvd

Nombre de messages : 117
Age : 28
Prénom : Michaël
Statut : 2ième Réseaux/Télécom
Localisation : Bruxelles
Date d'inscription : 16/09/2009

http://www.binturong.be

Revenir en haut Aller en bas

resolu Re: [SYS2] Shell

Message  Contenu sponsorisé Aujourd'hui à 21:04


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum