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 :

modifier le champ d'un fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Par défaut modifier le champ d'un fichier
    Bonjour à tous,

    J'ai un fichier qui contient des informations sur des personnes : nom, prénom, adresse, numéro de téléphone ...

    Les champs sont séparés par des ":" dans le fichier comme ceci :

    toto:tata:3 rue des acacias:célibataire:numéro de tel

    Mon problème se situe au niveau de la modification de ce fichier, par exemple je voudrais pouvoir modifier le numéro de téléphone d'une personne ou sa situation
    (Par exemple mettre marié à la place de célibataire si c'est le cas).

    J'ai essayé de faire le test avec le changement de numéro mais cela ne fonctionne pas :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    echo "nom de la personne à modifier"
    read nom && grep $nom personnes
     
    if [ $? -eq 0 ]   ##test si le grep est vrai
    then echo " nom du paramètre à modifier "
    read param
    else echo "le salarié n'existe pas"
    fi
     
    if [[ $param == "numéro" ]]
    then echo "quel est l'ancien numéro"
    read ancien
    echo "entrer le nouveau numéro"
    read nouv 
     
    $ancien=$nouveau
    Je remercie d'avance tous ceux qui pourrons m'aider

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    Par défaut
    indice : pour fournir l'ancienne valeur, il faut que tu aies lu, ou que tu sois en train de lire le fichier 'personnes'...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Par défaut
    Merci N_BaH pour ton indice

    J'ai réussi à modifier le numéro de téléphone d'une personne, le
    problème c'est que l'affichage dans le fichier se fait de la manière suivante :

    toto : : : : 0611111111

    Les autres champs sont vide alors qu'il devrait y avoir le prénom, l'adresse
    ainsi que la situation (marié(e), célibataire ou divorcé(e))

    Ces champs ont été renseignés plus haut dans le code et on dirait qu'ils ne sont pas connu


    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    !#/bin/bash
    clear
     
    echo -e                  "MENU - GESTION DES SALARIE\n"
    echo -e "Saisir les informations personnelles d'un salarié, taper 1\n"
    echo -e "Mettre à jour les informations sur un salarié, taper 2\n"
     
    read choix
     
    while (( $choix < 1 || $choix > 6 ))
    do echo "choix incorrect"
    read choix
    done
     
    case $choix in
     
    1) while ((1))
    do echo "Veuillez saisir les informations d'un salarié"
    echo "Nom du salarié"
    read nom
     
    [ ! -z $nom ] && break
    echo "le champ est obligatoire"
    done
     
    while ((1))
    do echo "Prénom du salarié"
    read prenom
     
    [ ! -z $prenom ] && break
    echo "le champ est obligatoire"
    done
     
    whille ((1))
    do echo "Situation du salarié : M marié(e); D divorcé(e); C célibataire"
    read situation
     
    if [[ $situation == "M" || $situation == "D" || $situation == "C" ]]
    then break
    else echo "erreur de saisi"
    fi
    done
     
    while ((1))
    do echo "adresse du salarié"
    read adresse 
    done
     
    while ((1))
    do echo "numéro de portable du salarié"
    read portable
     
    if [[ $portable == [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] ]]
    then break
    else echo "erreur de saisi"
    fi
    done
     
    echo $nom : $prenom : $situation : $adresse : $portable >> personnes
    ;;
     
    2)echo "Nom de la personne à modifier"
    read nom
     
    echo "Nom du paramètre à modifier"
    read param
     
    if [[ $param == "numéro" ]]
    then echo "Entrer le nouveau numéro"
    read numero
    else "erreur de saisi"
    fi
     
    grep -v $nom personnes > tmp  #retrait de la ligne contenant la personne                               #concernée
     
    echo $nom : $prenom : $situation : $adresse : $numero >> tmp
    sort tmp > personnes    #recopiage des bonnes infos avec le nouveau numéro
                                    #dans le fichier personnes  
     
    esac

    Est ce que quelqu'un peut m'aider ?
    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    Par défaut
    Pour la partie 2, j'avais plutôt vu quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    TTY=$(tty)
    BASE="ton_fichier2data"
     
    read -p ' Entrez le nom de la personne dont il faut modifier des informations : ' ID
     
    grep "^$ID" "$BASE" >/dev/null 2>&1 || {
       echo "$ID n'existe pas dans la base"
       exit
    }
     
    while IFS=':' read nom prenom adresse etat numtel
     do
       line="${nom}:${prenom}:${adresse}:${etat}:${numtel}"
       [ $nom = $ID ] && {
          echo "$nom existe dans la base"
          echo "$line"
          read -p ' Quelle information souhaitez-vous modifier : ' info < $TTY
          read -p ' Quelle est la nouvelle valeur de l'\''information : ' modif < $TTY
          case $info
           in
             nom) echo "${modif}:${prenom}:${adresse}:${etat}:${numtel}" >> $BASE.tmp
             ;;
             prenom) echo "${nom}:${modif}:${adresse}:${etat}:${numtel}" >> $BASE.tmp
             ;;
             adresse) echo "${nom}:${prenom}:${modif}:${etat}:${numtel}" >> $BASE.tmp
             ;;
             etat) echo "${nom}:${prenom}:${adresse}:${modif}:${numtel}" >> $BASE.tmp
             ;;
             numtel) echo "${nom}:${prenom}:${adresse}:${etat}:${modif}" >> $BASE.tmp
             ;;
          esac
       }
     || {
          echo "$line" >> $BASE.tmp
       }
    done < $BASE
     
    mv $BASE.tmp $BASE
    en gros.
    J'ai pas mis de test sur l'existence des données fournies, mais ce n'est pas inutile.

    PS : pourquoi tant de while, quand if (dont case tient le rôle) devrait être utilsé, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #while (( $choix < 1 || $choix > 6 )); do
    #   echo "choix incorrect"
    #   read choix
    #done
    if [ $choix -lt 1 -o $choix -gt 6 ]
     then
       echo "Choix incorrect"
       read choix
    fi
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Par défaut
    J'ai écrit le code que tu m'a donné, le problème c'est quand je lance le programme, le shell me demande l'information à modifier puis la nouvelle valeur, je les tapent mais il me redemande l'information puis la nouvelle valeur et ainsi de suite.

    N'a tu pas oublié une commande dans ton code ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    Par défaut
    Citation Envoyé par dude78
    le code que tu m'a donné
    Oui, mais lequel ?

    Peu importe, les deux ont été testés. De mon côté, ça fonctionne...

    Exécute le en ajoutant l'option -x à la commande interne set, tu auras une sortie plus explicite de ce que traite le script...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Modifier un champ dans un fichier texte
    Par Klyre dans le forum LabVIEW
    Réponses: 7
    Dernier message: 03/06/2015, 14h28
  2. JFileChooser - Modifier le champ Nom de fichier:
    Par bertrand80 dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 23/03/2010, 14h48
  3. Modifier plusieurs champs dans un fichier Csv
    Par francois_a dans le forum Shell et commandes GNU
    Réponses: 36
    Dernier message: 02/09/2009, 17h31
  4. modifier un champs d'un ligne selectionner dans une fichier texte
    Par darkman13130 dans le forum C++Builder
    Réponses: 8
    Dernier message: 26/06/2008, 12h00
  5. [CSV] Modifier un champ d'un fichier CSV
    Par BernardT dans le forum Langage
    Réponses: 3
    Dernier message: 04/07/2007, 10h13

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