Lire chaque mot d'une ligne

Résolu
lanulledu28 -  
 lanulledu28 -
Bonjour,

Je suis novice et je cherche un peu d'aide.
Je souhaite lire chaque mot d'une ligne d'un fichier pour le mettre dans une variable.
Par exemple,
dans le fichier Toto :
ligne=tutu titi 123 tata 251 144 

Et je voudrais : 
var1 = tutu
var2=titi
....

J'utilise la fonction sur ma ligne (que j'ai deja extraite)
var1 = 'ligne|gawk -F" " '{print $1}'


et voudrais plutôt utiliser sfift car j'ai pas mal de mot sur la ligne.

merci de vos reponses

10 réponses

  1. Utilisateur anonyme
     
    je pense que je vais tester chaque variable l'une autre l'autre
    Bon courage!

    J'insiste: tu devrais construire le fichier de données avec un séparateur (que ce soit une virgule, un point-virgule, une tabulation, ou autre chose).
    2
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Utilise un tableau plutôt, non ?

    $ ligne=( tutu titi 123 tata 251 144 )
    
    $ echo ${ligne[*]}
    tutu titi 123 tata 251 144
    
    $ echo ${#ligne[*]}
    6
    
    $ echo ${ligne[0]}
    tutu
    
    $ echo ${ligne[2]}
    123
    
    $ echo ${ligne[5]}
    144
    
    $ 

    0
  3. Utilisateur anonyme
     
    salut,

    Je souhaite lire chaque mot d'une ligne d'un fichier pour le mettre dans une variable.

    Ce n'est pas une stratégie viable.
    Tu vas être très embêté par la suite pour retrouver la bonne variable, et ça va amener une solution risquée.

    Utiliser un tableau peut être une solution, mais est-ce vraiment utile ?

    Sans en savoir plus, je ne peux pas en dire davantage.
    0
  4. lanulledu28
     
    Oui pour mettre chaque variable a la bonne place ça risque d'être tendu.

    Une ligne est structurée de la façon suivante :
    Nom1 Prenom1 Age Année_Naissance Date_Abonnement Type_Abonnement Status(optionnel) 1111  Magazine Numéro_Magazine 
    
    ce qui donne : 
    Dupond Gerard 23 1990 12/12/12 mensuel impayé 1111 Sport 2 
    
    Martin Paul 35 1961 12/12/11 mensuel 1111 Science 5
    
    


    Un tableau peut être problématique car le nombre de variable n'est pas fixe ...
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Si tu nous disais ce que tu comptes faire exactement, peut être pourrions-nous t'aider au mieux, parce que là c'est un peu confus ;-\
      0
    2. lanulledu28
       
      Avec cette ligne je souhaite mettre les variables telque
      Nom = Dupond
      Prénom=Gerard
      Age =23
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    Un tableau peut être problématique car le nombre de variable n'est pas fixe ...

    #1- construire correctement le fichier de données : CSV? champs de longueurs fixes?
    0
  7. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    $ cat plop 
    Dupond Gerard 23 1990 12/12/12 mensuel impayé 1111 Sport 2 
    Martin Paul 35 1961 12/12/11 mensuel 1111 Science 5
    
    $ cat foo.sh 
    #!/bin/bash
    
    while read Nom Prenom Age Anniv Abon Type Status Ref Mag NumMag
    do
    echo "
    Nom = ${Nom}
    Prénom = ${Prenom}
    Age = ${Age}
    Date de Naissance = ${Anniv}
    Date d'abonnement = ${Abon}
    Type d'abonnement = ${Type}
    Status = ${Status}
    Référence = ${Ref}
    Magazine = ${Mag}
    Numéro de magazine = ${NumMag}
    "
    done < plop
    
    $ ./foo.sh 
    
    Nom = Dupond
    Prénom = Gerard
    Age = 23
    Date de Naissance = 1990
    Date d'abonnement = 12/12/12
    Type d'abonnement = mensuel
    Status = impayé
    Référence = 1111
    Magazine = Sport
    Numéro de magazine = 2
    
    
    Nom = Martin
    Prénom = Paul
    Age = 35
    Date de Naissance = 1961
    Date d'abonnement = 12/12/11
    Type d'abonnement = mensuel
    Status = 1111
    Référence = Science
    Magazine = 5
    Numéro de magazine = 
    
    
    $

    0
  8. lanulledu28
     
    Effectivement je ne suis mal exprimé,

    En donnée brut j'ai plusieurs lignes telque
    ->Dupond Gerard 23 1990 12/12/12 mensuel impayé 1111 Sport 2
    ->Martin Paul 35 1961 12/12/11 mensuel 1111 Science 5
    ->Durant 25 1955 12/12/12 hebdo 1111 Tricot 4 Musco 9

    malheureusement , les variables ne sont pas à la meme place pour chaque ligne.7Par exemple , après la variable Nom on peut lire soit Prenom soit directement l'age Age ,
    de meme pour status pour la deuxieme ligne tout est decalé.

    Tu obtient :
    Nom = Martin
    Prénom = Paul
    Age = 35
    Date de Naissance = 1961
    Date d'abonnement = 12/12/11
    Type d'abonnement = mensuel
    Status = 1111
    Référence = Science
    Magazine = 5
    Numéro de magazine =

    alors qu'il faudrait :

    Nom = Martin
    Prénom = Paul
    Age = 35
    Date de Naissance = 1961
    Date d'abonnement = 12/12/11
    Type d'abonnement = mensuel
    Status =
    Référence = 1111
    Magazine = Science
    Numéro de magazine = 5
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      malheureusement , les variables ne sont pas à la meme place pour chaque ligne
      Alors c'est quasiment du domaine de l'impossible ;-((
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      à moins que le contenu possible de chaque champ soit connu
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Oui pour certains, mais en ce qui concerne le champ "Prenom", sans compter les 4 derniers qui sont apparemment très aléatoire concernant l'ordre ;-\

      En donnée brut j'ai plusieurs lignes telque
      ->Dupond Gerard 23 1990 12/12/12 mensuel impayé 1111 Sport 2
      ->Martin Paul 35 1961 12/12/11 mensuel 1111 Science 5
      ->Durant 25 1955 12/12/12 hebdo 1111 Tricot 4 Musco 9 
      0
    4. Utilisateur anonyme
       
      Le principe élémentaire d'un(e) fichier/base de données, c'est d'être organisé(e).
      Imaginez une feuille excel sans colonnes! un CSV sans séparateur! des longueurs fixes qui changent!

      Sinon, il reste les dés.. Ah ben non, les angles séparent les faces!
      Les billes, alors!
      XD
      0
    5. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Les billes, alors!
      On risque de tourner en rond ;-))
      0
  9. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    pour savoir qu'à la ligne 2 il y a un champ vide (status) après manuel, il faudrait une variable vide ""
    0
  10. lanulledu28
     
    Mouais je pense que je vais tester chaque variable l'une autre l'autre..... :/
    0
  11. lanulledu28
     
    j'allais oublier mais merci à tous de m'avoir aider.
    0