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 :

Ajout ponctuation en fin de ligne sur un fichier .csv


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Ajout ponctuation en fin de ligne sur un fichier .csv
    Bonjour,

    J'ai un fichier excel que je convertis en .csv pour le traiter via un programme PL/SQL sous unix.
    Dans mon fichier .csv, suite à la conversion à partir d'excel, il manque parfois le séparateur ';' en fin de ligne, le dernier champ du fichier qui est un code action, n'est donc pas pris en compte dans le programme.

    Exemple :

    XXX1;LIBELLE1;LIBELLE2;;Coché;;;;;;;;;;;C^M
    XXX2;LIBELLE1;LIBELLE2;;Coché;;;;;;;;;;;C^M
    XXX3;LIBELLE1;LIBELLE3;;Coché;;;;;;;;;;;C^M

    Comment faire en shell pour tester le dernier caractère de chaque ligne du fichier et le cas échéant, si ce n'est pas un ';', insérer le ';' ?

    Merci d'avance.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour,

    N'as-tu pas posé cette question il y a quelques jours ?

    Quoiqu'il en soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/[^;]$/&;/' fichier
    Nota bene: En rajoutant un ; tu rajoutes un champ.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    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 deoris Voir le message
    Comment faire en shell pour tester le dernier caractère de chaque ligne du fichier et le cas échéant, si ce n'est pas un ';', insérer le ';' ?
    Comme proposé par Flodelarab, ou bien, par exemple, avec ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/\([^;]\)$/\1;/'
    Mais attention au RETURN (^M)!

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Bonjour,

    Les solutions données rajouteront dans tous les cas un ";" puisque le dernier caractère est un "\r" (le control M)...
    Je suppose que c'était sous-entendu dans la mise en garde de jack-ft
    Cordialement.

  5. #5
    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 deoris Voir le message
    J'ai un fichier excel que je convertis en .csv pour le traiter via un programme PL/SQL sous unix.
    Dans mon fichier .csv, suite à la conversion à partir d'excel, il manque parfois le séparateur ';' en fin de ligne,
    Je reviens sur le problème de départ bien que, vu l'activité du PO, il y ait très peu de chances qu'il réponde!

    Lorsque, avec Excel, on sauve un fichier excel au format csv avec séparateur ';', le dernier champ n'est PAS suivi par un ';'.

    La syntaxe semble être: <champ1><séparateur> ... <séparateur> <champN>

    La convention semble être que, si une ligne du fichier se termine par un ';', c'est que le dernier champ (après ce ';') est vide!
    (ceci arrive effectivement lorsqu'au moins une ligne contient effectivement un Nème champ non vide et que le Nème champ d'une autre ligne est vide)

    le dernier champ du fichier qui est un code action, n'est donc pas pris en compte dans le programme.
    C'est peut-être le programme en question qu'il faut revoir!

    Soit parce qu'il ne suit pas la "syntaxe standard" décrite ci-dessus, soit parce qu'il a du mal à (di)gérer le ^M contenu dans le dernier champ!

    Mais j'ai peu d'espoir d'avoir la réponse...

    Exemple :

    XXX1;LIBELLE1;LIBELLE2;;Coché;;;;;;;;;;;C^M
    XXX2;LIBELLE1;LIBELLE2;;Coché;;;;;;;;;;;C^M
    XXX3;LIBELLE1;LIBELLE3;;Coché;;;;;;;;;;;C^M

    Comment faire en shell pour tester le dernier caractère de chaque ligne du fichier et le cas échéant, si ce n'est pas un ';', insérer le ';' ?

  6. #6
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Comme proposé par Flodelarab, ou bien, par exemple, avec ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/\([^;]\)$/\1;/'
    Mais attention au RETURN (^M)!
    Bonjour,

    En testant ta commande, j'obtiens les lignes suivantes :

    XXX1;LIBELLE1;LIBELLE2;;Coché; ;;;;;;;;;;C^M;
    XXX2;LIBELLE1;LIBELLE2;;Coché;;;;;;;;;;;C^M;
    XXX3;LIBELLE1;LIBELLE2;;Coché;;;;;;;;;;;C^M;

    Le programme PL/SQL ne va pas gérer correctement les sauts de ligne.
    Est-il possible d'insérer le point virgule avant le control-m ?

  7. #7
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Si tu es sure que toutes les lignes finissent par ^M, l'une des deux commandes suivantes ne règle-t-elle pas le problème?

    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #8
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Je reviens sur le problème de départ bien que, vu l'activité du PO, il y ait très peu de chances qu'il réponde!

    Lorsque, avec Excel, on sauve un fichier excel au format csv avec séparateur ';', le dernier champ n'est PAS suivi par un ';'.

    La syntaxe semble être: <champ1><séparateur> ... <séparateur> <champN>

    La convention semble être que, si une ligne du fichier se termine par un ';', c'est que le dernier champ (après ce ';') est vide!
    (ceci arrive effectivement lorsqu'au moins une ligne contient effectivement un Nème champ non vide et que le Nème champ d'une autre ligne est vide)



    C'est peut-être le programme en question qu'il faut revoir!

    Soit parce qu'il ne suit pas la "syntaxe standard" décrite ci-dessus, soit parce qu'il a du mal à (di)gérer le ^M contenu dans le dernier champ!

    Mais j'ai peu d'espoir d'avoir la réponse...
    Bonjour,

    Bien vu, le problème vient bien du programme PL/SQL. J'utilise une fonction pour spliter mes lignes et elle est mal programmée, ce qui fait que le dernier champ du fichier n'est traité que s'il est suivi d'un ';'....

  9. #9
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Si tu es sure que toutes les lignes finissent par ^M, l'une des deux commandes suivantes ne règle-t-elle pas le problème?


    Bonjour,

    Merci, effectivement cela résout le problème.

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

Discussions similaires

  1. ajouter un ; a la fin de chaque ligne de mon fichier CSV
    Par pelois dans le forum Conception
    Réponses: 1
    Dernier message: 21/06/2010, 09h24
  2. Ajout de caractéres en fin des lignes d'un fichier texte
    Par loubna04 dans le forum VBScript
    Réponses: 1
    Dernier message: 30/03/2010, 12h03
  3. Réponses: 13
    Dernier message: 25/07/2007, 20h03
  4. [CSV] Ajouter et supprimer des ligne dans un fichier CSV
    Par gpsevasion dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2007, 17h00
  5. Fin de ligne dans un fichier
    Par Neekow dans le forum Langage
    Réponses: 6
    Dernier message: 03/06/2005, 19h54

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