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 :

Ecriture d'une chaine facon CSV qui fait n'imp


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur de Production
    Inscrit en
    Mai 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de Production
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2009
    Messages : 64
    Par défaut Ecriture d'une chaine facon CSV qui fait n'imp
    Bonjour

    J'ai fait pas mal de scripting en shell/ksh dans ma carrière, et dans le lot il m'arrivait que des faire des shell pour generer des fichiers csv, et j'ai jamais eut de problèmes avec ca.
    bon, ca va faire 2 ans que j'ai pas fait de scripting serieusemenet, je m'y remet pour un petit projet, et je tombe sur une anomalie que je ne parvient pas a comprendre.

    Je recupère des données a gauche et a droite via mon script en ksh, puis à la fin je fait une chaine de caractère type csv que je met dans un fichier.csv
    separateur : ;

    jusque la je faisait toujours de cette facon :
    Code ksh : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "${var1};${var2};${var3};" >> fichier.csv

    La je suis sur une VM Ubuntu serveur, mon script est en ksh, mais quand je lance mon script, au final ma chaine ressemble a rien,
    au lieu d'avoir mes valeurs dans le bon ordre, j'ai un mélange étrange

    exemple :
    Code ksh : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var1 = 123456
    var2=toto
    var3=987

    au lieu d'avoir dans mon fichier : 123456;toto;987
    j'ai : ;toto987;123456

    c'est à n'y rien comprendre.

    Voici en code ma boucle qui récupère des données et les met dans un CSV final
    agent_demat est un fichier csv avec en entete précédé d'un#, d'ou le grep -v pour ignorer cette ligne
    agent_full est au csv avec des données complementaires

    mes csv sont tous avec un ; en separateur

    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
     
    cat ${agent_demat} | grep -v "^#" | while read line
    do
            matricule=$(echo $line | cut -d";" -f1)
            fic_pdf=$(ls ${pdf_dir}/${matricule}*.pdf)
            #on check qu'on a bien qu'un fichier
            verif=$(echo ${fic_pdf} | wc -w)
            if [ ${verif} -ne 1 ]; then
                    echo "ERREUR Plusieurs fichiers PDF trouve pour le matricule : ${matricule}"
                    #on skip la suite et on passe a la suite
                    continue
            fi
            #Recuperation info de l'agent
            nir=$(grep ${matricule} ${agent_full} | cut -d";" -f3)
            nom=$(grep ${matricule} ${agent_full} | cut -d";" -f2)
            #calcul du sexe par rapport au NIR
            sexe=$(echo ${nir} | cut -c1)
            #calcul du status de l'agent
            statut=$(grep ${matricule} ${agent_full} | cut -d";" -f4)
            case $statut in
                    "TITULAIRE")
                            stat="T"
                            ;;
                    *)
                            stat="C"
                            ;;
            esac
            priode=$(grep ${matricule} ${agent_full} | cut -d";" -f5)
            montant=$(grep ${matricule} ${agent_full} | cut -d";" -f6)
            ddnaiss=$(echo $line | cut -d";" -f4)
            iban=$(echo $line | cut -d";" -f5)
            #Renommage du PDF
            #generation du nom
            pdf_fin="${nir}_${MAIRIE_SIREN}_BPaie_${dtrt}_${seq}.pdf"
            mv ${fic_pdf} ${pdf_dir}/${pdf_fin}
     
            #Ecriture CSV final
            echo "${matricule};${nom};${nir};${sexe};${ddnaiss};${iban};${stat};${MAIRIE_SIREN};${dtrt};${montant};${pdf_fin};${seq}" >> ${csv_fin}
            ((seq++))
    done
    si dans la boucle je ait des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo "${var1}"
    echo "${var2}"
    ...
    pas de soucis tout s'affiche correctement, mais des que je met tout en ligne avec les ; en separateur, tout fou le camp >_<

    Si vous trouvez l'erreur je suis preneur, car la je pense avoir les yeux qui se croisent
    Merci

  2. #2
    Membre Expert Avatar de Ti-Slackeux
    Homme Profil pro
    Robotique
    Inscrit en
    Août 2007
    Messages
    912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Robotique

    Informations forums :
    Inscription : Août 2007
    Messages : 912
    Par défaut
    un truc comme çà en passant,

    Manquerait pas le shebang au début du script ?
    un script ksh sous bash ça pourrait coincer aux entournures non ?

    un truc du style #!/bin/ksh -u ?

    hth,

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    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 376
    Par défaut
    Alors difficile comme ça de voir ce qui est anormal sans un jeu de donnée brut...

    mais déjà, il y a une ligne qui va exciter N_BaH (c'est celle qui récupère ta liste de fichier

    protège tes variables avec des double quotes car là tu peux avoir pas d'effet de bord

    et sinon, peux tu nous envoyer le résultat en modifiant l' echo final par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "${matricule};${nom};${nir};${sexe};${ddnaiss};${iban};${stat};${MAIRIE_SIREN};${dtrt};${montant};${pdf_fin};${seq}" | cat -A
    Cordialement.

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur de Production
    Inscrit en
    Mai 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de Production
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2009
    Messages : 64
    Par défaut
    le shebang est au debut et est #!/bin/ksh
    c'est juste qu'en entete j'ai mes declaration de variable pas forcement interessant.

    pour la recuperation de la liste de fichier, tu parles du fic_pdf=$(ls ....) ??
    j'ai toujours fait comme ca, mais si y'a mieux je prend aussi

    Je peut pas vous fournir de données car ce sont des données personnelles et confidentielles concernant les agent de ma commune.

    je vais tester la protection par double quote

    edit : ok, apres execution ebn mode debut (#!/bin/ksh -x, me souvenait plus de ça >_<)
    je vient de voir que certaines données recupérés avaient un \r en fin de ces dernières, d'ou le problème j'imagine.

    le fichier source d'ou ca provient est generé par un script python, qui lit un ficheir pseudo xml, extrait les données qui m'interesse et les colle dans un CSV, par contre avec un cat -v, j'ai des ^M en fin de ligne ...
    va falloir que je corrige ca du coup

    Satané ^M, j'avais oublier ca

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    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 376
    Par défaut
    Test aussi la ligne que je t'ai donné, tu verras peut-être des caractère bizarre qui peuvent modifier les affichages
    Cordialement.

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur de Production
    Inscrit en
    Mai 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de Production
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2009
    Messages : 64
    Par défaut
    Oui j'etait en train d'editer mon précédent message, j'ai trouver la cause

  7. #7
    Membre Expert Avatar de Ti-Slackeux
    Homme Profil pro
    Robotique
    Inscrit en
    Août 2007
    Messages
    912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Robotique

    Informations forums :
    Inscription : Août 2007
    Messages : 912
    Par défaut
    Citation Envoyé par Chico008 Voir le message
    Oui j'etait en train d'editer mon précédent message, j'ai trouver la cause
    Qui était ??

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

Discussions similaires

  1. Syntaxe d'écriture d'une chaine
    Par FracMaster dans le forum Langage
    Réponses: 1
    Dernier message: 28/05/2007, 12h44
  2. Réponses: 5
    Dernier message: 09/11/2006, 21h27
  3. Réponses: 11
    Dernier message: 05/03/2006, 17h02
  4. Ecriture d'une chaine de caractères dans un fichier
    Par fleur_de_rose dans le forum MFC
    Réponses: 6
    Dernier message: 10/02/2006, 09h34
  5. [VB.NET] une chaine de caractère qui devient une propriete
    Par lucie.houel dans le forum ASP.NET
    Réponses: 8
    Dernier message: 20/09/2005, 14h10

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