IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Découper une phrase


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Découper une phrase
    Bonsoir, je suis en train de créer un script qui devra lire mot par mot un fichier mis en parametre dans le but de corriger son coding style cependant je suis arrêté sur un probleme qui ne devrait pas être tres compliqué..

    j'ai une fonction qui recois une ligne et j'aimerais découper cette ligne mot par mot pour ensuite traiter justement ces mots là un par un mais je pense qu'il doit y avoir une commande systeme me permettant de faire ceci cependant je ne la trouve pas..

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    Bonjour,

    lire mot par mot un fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in $(<fichier); do echo "$i"; done
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ ligne="bla1 bla2 bla3"
    $ splitLine()
    {
       for i do echo "$i"; done
    }
    splitLine $ligne #sans guillemets !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut probleme
    je vous remercie de m'avoir aidé cependant, ca souleve un autre probleme j'aimerais qu'il m'affiche non pas la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    line = "bla1, bla2, bla3"
    pour le moment la sortie ressemble a ca :
    cependant comment je pourrais faire comme ceci : "bla1, bla2, bla3" car je veux analysé chaque mot de la phrase mais pas modifie le positionnement de la phrase..
    j'aimerais qu'a chaque tour de boucle ma valeur qui prendra le mot soit au premier tour bla1, au deuxieme bla2, ...
    je ne vois pas comment faire

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    la ligne n'est pas modifiée.
    la fonction boucle sur chaque mot de la ligne sans la modifier.
    dans l'exemple, la fonction affiche chaque mot, mais elle n'y est pas obligée, tu peux lui faire faire ce que tu veux...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    Salut, c'est ça que tu veux ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in $(<fichier); do echo -n "$i "; done
    Sous Kubuntu 20.04

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    voici mes deux fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    lineToWords()
    {
        for i do echo "$i"; done
    }
    readLine()
    {
        while read line
        do
            echo "$line"
            lineToWords $line
        done < test1.sh
     
    }
    j'aimerais par exemple si la phrase contient "fonction blabla() {instruction}"
    faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fonction blabla
    {
              instructions
    }
    mais la le soucis c'est que même si je change mot par mot rien ne changera car la phrase sera echo et ensuite modifier.. alors que je voudrais faire l'inverse.

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    pas de problèmes.
    il faut dire au script, lors du découpage en mots, quoi faire quand il rencontre tel ou tel mot : afficher, ou stocker pour un usage/affichage ultérieur...
    avec des test, ou un case.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Bonjour,

    Déjà, pour ton cas spécifique, il serait bien que tu nous décrives la définition du terme "mot" ?

    Car à priori, c'est plus compliqué qu'un simple terme séparé par un espace...
    Cordialement.

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par evasi0n Voir le message
    mais la le soucis c'est que même si je change mot par mot rien ne changera car la phrase sera echo et ensuite modifier.. alors que je voudrais faire l'inverse.
    Si tu veux faire l'inverse, rien de plus simple: il suffit de permuter les 2 instructions echo "$line" et lineToWords $line, mais je ne vois pas du tout à quoi sert la première instruction echo "$line". Il me semble préférable de la supprimer complètement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    lineToWords() { 
        for i do
            echo "$i" # ou tout autre traitement
        done
    }
    readLine()
    {
        while read line
        do
            lineToWords $line
        done < test1.sh
    }
    Citation Envoyé par evasi0n Voir le message
    je suis en train de créer un script qui devra lire mot par mot un fichier mis en parametre dans le but de corriger son coding style
    Apparemment, tu veux corriger l'indentation d'un fichier de code!

    Attention, c'est un problème assez difficile... assez proche d'un compilateur.
    La première étape consiste à faire le découpage lexical: il faut définir précisément ce que sont les séparateurs pour faire le découpage en tokens,
    puis il faut faire l'analyse syntaxique...

    Si c'est pour un exercice, c'est un excellent exercice.

    Si c'est juste pour ton usage personnel, il est bôôôôôcoup plus simple de s'appuyer sur l'existant, par exemple, utiliser un éditeur de texte qui sache faire l'indentation (comme emacs, sublime text, notepad++, vi, fraise, etc.) pour toutes sortes de langages.

Discussions similaires

  1. Découper les mots dans une phrase
    Par selmastar dans le forum Débuter
    Réponses: 2
    Dernier message: 28/03/2013, 07h58
  2. Découper une phrase
    Par hidewak dans le forum Langage
    Réponses: 5
    Dernier message: 19/07/2011, 16h31
  3. Découper une phrase en mot
    Par punisher999 dans le forum Général Java
    Réponses: 17
    Dernier message: 26/03/2010, 09h14
  4. [Tableaux] Découper une phrase en mots
    Par cmoiscrat dans le forum Langage
    Réponses: 5
    Dernier message: 14/02/2006, 13h29
  5. [Débutant][Token] découper une chaine
    Par _Eric_ dans le forum Langage
    Réponses: 14
    Dernier message: 06/07/2004, 10h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo