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 :

Ordonner les données fichier XML


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 24
    Par défaut Ordonner les données fichier XML
    Bonjour,

    Je souhaite automatiser une tâche en Shell, mais pour l'instant ça ne marche pas.

    En fait, j'ai un fichier XML qui contient plusieurs fois la balise suivante : <value>Number</value> avec Number est un nombre qui va de 1 à n.
    Je souhaiterais que mon script commence à lire la première ligne du fichier XML et à chaque fois qu'il rencontre <value>Number</value>, il remplace Number par 1 et il incrémente pour les autres de manière croissante.

    Voici mon script mais il ne marche pas comme je le veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/sh
     
    i=J=1
    Echo -n " saisir nombre : "
    while [$i -le $nombre]
    do
       let J=$J-1
       let Number =$J+1
       sed s/"Number"/"$Number"/g
        let i=$i+1
    Done
    Merci de votre aide !

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    le shell est sensible à la casse : un mot est différent d'un Mot !

    il faut des espaces autour des commandes, même [.

    et ça :i=J=1 n'est pas possible en shell.

    Comment lire une fichier en shell
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 24
    Par défaut
    Merci N_BAH pour ta réponse !

    J'ai modifié mon script mais toujours le même soucis.

    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
    #!/bin/sh
    *
    i=1
    J=1
    Echo -n " saisir le nombre : "
     
    while [ $i -le $nombre ]
     
    do
       let J=$J-1
       let Number =$J+1
       sed s/"Number"/"$Number"/g  fichier.xml >> fichier_2.xml
       let i=$i+1
    Done
     
    exit 0

    D'avance merci de votre aide !

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    je vois ça :
    le shell est sensible à la casse : un mot est différent d'un Mot
    .

    et dire «ça marche pô», sans donner les messages d'erreurs ...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Sans compter que la commande "echo" ne fait qu'afficher ce qui la suit, elle n'a jamais eu vocation à retenir ce qui est tapé dans le terminal

    Pour ça voir la commande "read" du bash.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 24
    Par défaut Ordonner les données fichier XML
    N_BAH,

    En fait je n'ai aucune erreur dans le script. Il s'exécute parfaitement mais le seul problème il remplace toutes les balises <value>Number</value> par <value>1</value>. J'ai l'impression il ne prend pas en compte la boucle while. Le Number=1 est valable uniquement pour la première balise le second doit passer à 2 etc....

    Merci d'avance !

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    En fait je n'ai aucune erreur dans le script.
    ça m'étonne, vu le nombre d'erreurs que j'y vois.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    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 103
    Par défaut
    La balise <value>Number</value> peut-elle apparaître plusieurs fois sur la même ligne?

    si oui, je ne vois pas de solution triviale, sinon une solution en awk ma paraît très simple (en utilisant l'algo proposé par N_BaH).

  9. #9
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Sinon, là ça va encore vu la trivialité du traitement mais dès qu'on commence à manipuler beaucoup de fichiers XML, il est préférable de partir sur un langage shell un peu plus évolué avec des outils spécifiques au parsing XML : Dom, Xpath... je pense à des langages comme Perl ou PHP qui s'utilisent très bien en mode shells scripts.

    Exemple en PHP :

    Code php : 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
    idriss@ThinkPad-T420 ~ $ cat fichier.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
        <value>toto</value> <!-- ne pas prendre en compte -->
        <value>100</value>
        <node><value>25</value></node>
    </root>
    idriss@ThinkPad-T420 ~ $ cat test.php 
    #!/usr/bin/php
     
    <?php
        define ('PATH_FILE', 'fichier.xml');
        define ('XPATH_VALUE_ABSOLUTE', '//value');
     
        $xml = simplexml_load_file(PATH_FILE);
        if ($xml){
            $arrayValues = $xml->xpath(XPATH_VALUE_ABSOLUTE);
            if ($arrayValues){
                $i=1;
                foreach ($arrayValues as $value){
                    if(preg_match("/^[0-9]+$/", (string) $value)){
                        $value[0] = $i;
                        $i++;
                    }
                }
            }
            file_put_contents(PATH_FILE, $xml->saveXML());
        }
    ?>
    idriss@ThinkPad-T420 ~ $ ./test.php
     
    idriss@ThinkPad-T420 ~ $ cat fichier.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
        <value>toto</value> <!-- ne pas prendre en compte -->
        <value>1</value>
        <node><value>2</value></node>
    </root>
    idriss@ThinkPad-T420 ~ $

    Cordialement,
    Idriss

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 24
    Par défaut Ordonner données en shell
    Merci pour vos réponses :

    j'ai testé l'algo proposé par N_BAH, mais au final, il ne remplace rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #!/bin/sh
    set -x
    n=1
    while read ligne
    do
            if (expr "$Ligne" : '<Value>(.*)</Value>')
            then
                    sed s/"<Value>(.*)</Value>"/"<Value>$n</Value>"/g
    	   let n=$n+1
            else
                    sed s/"$ligne"/
            fi
    done < Fichier.xml
    voici les résultats :

    avant exécution du script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <value>Number</value>
    Après exécution du script :

    Merci de votre aide, je suis novice en programmation d'où mes nombreuses questions de bas niveau.

  11. #11
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Citation Envoyé par poullodiery Voir le message
    j'ai testé l'algo proposé par N_BAH, mais au final, il ne remplace rien :
    Ce qui est encore plus étonnant, c'est qu'il s'exécute
    Une commandes sed sans rien en entrée (ni redirection, ni fichier), elle attend une entrée... et une fin de fichier

    Le plus étonnant, c'est qu'avec l'option -x, tu devrais voir le déroulement de ton script et l'affectation des variables.
    Tout semble s'exécuter ? Ligne à ligne ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    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 103
    Par défaut
    Plus précisément, il manque quelques echo "${ligne}" avec ou sans pipe

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. extraire données fichiers xml vers excel
    Par newcodeur dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/06/2008, 10h17
  2. ordonner les données d'une feuille dans une macro
    Par meuah dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/05/2008, 15h27
  3. [SQL2k5][XML] Retourner les données en XML
    Par maitrebn dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 22/02/2008, 08h46
  4. Les données du xml en php
    Par ti-bo dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 19/07/2007, 00h45
  5. Que choisir pour gérer les sauvegardes : fichiers XML ou base de données ?
    Par Invité dans le forum Développement 2D, 3D et Jeux
    Réponses: 11
    Dernier message: 14/06/2007, 11h58

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