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 :

Modification d'un fichier txt [Débutant(e)]


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 282
    Par défaut Modification d'un fichier txt
    Bonjour,

    Je veux faire un requete Business Object et j'ai besoin d'une liste de code CCAM séparé par des , et entouré par des croches.

    Par exemple je recois un fichier du type:

    DEQP003;ZBQK002;ZCQK002;...

    je souhaite obtenir

    'DEQP003','ZBQK002','ZCQK002',...

    Comment dois je m'y prendre.

    Merci

  2. #2
    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,

    Voici une façon de faire avec "sed" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "DEQP003;ZBQK002;ZCQK002;..." | sed "s/;/,/g;s/[^,$]*/'&'/g"
    'DEQP003','ZBQK002','ZCQK002','...'

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 282
    Par défaut
    Merci pour ta reponse.

    Je vais essayer mais j'ai une autre question, ne peux t'on pas lui dire que tous les 7 caractères on met une virgule.

    Encore merci et je vais essayer ce soir.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 282
    Par défaut
    Je souhaite lui indiquer le fichier de départ et le résultat dans un autre fichier.

    Sinon je viens de faire l'essai et cela marche mais je voudrais le résultat dans un fichier.

    Je sais qu'il faut utiliser le redirection.

    > fichier.txt

    Encore merci

  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
    Citation Envoyé par islande Voir le message
    Je souhaite lui indiquer le fichier de départ et le résultat dans un autre fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "s/;/,/g;s/[^,$]*/'&'/g" fichier_entrée > fichier.txt

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Par défaut
    bonjour,

    je n'ai pas compris la deuxième substitution, est ce que c'est pour encadrer les mots?
    est ce que tu pourrais la commenter stp ?

    merci d'avance

  7. #7
    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
    [^,$]*
    On recherche un motif englobant tout jusqu'à ce qu'il rencontre un des deux caractères compris entre crochets. Le "^" marquant la négation. Donc n'importe quel caractère à l'exception d'une virgule (,) ou d'une fin de ligne (le "$" représentant le caractère fin de ligne).

    '&'
    L'esperluette (&) est un raccourci pour représenter le motif matché par la regex.
    Ici on entoure le motif avec des quotes simples.

    On aurait pu écrire tout aussi bien sed "s/;/','/g;s/.*/'&'/". Dans un premier temps s/;/','/gon substitue tous les points virgules par une virgule, et dans un second temps s/.*/'&'/, on matche toute la ligne et on l'entoure par des quotes simples.

  8. #8
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 299
    Par défaut
    Bonjour

    L'exclusion de la fin de ligne ne marche pas chez moi. Je préfère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "s/;/,/g;s/[^,]\+/'&'/g"
    Car '*' signifie 0 ou + mais '+' signifie 1 ou +. '\' sert à ne pas prendre le '+' comme un caractère simple.

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

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "DEQP003;ZBQK002;ZCQK002;..." | awk -v s="'" 'BEGIN{FS=";"; OFS=","}{for (i=1; i<=NF; i++)$i=s $i s}1'
    'DEQP003','ZBQK002','ZCQK002','...'

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Bonjour,

    Petite variante syntaxique de awk qui me semble intéressante uniquement parce qu'elle évite la boucle car, pour le reste, elle est à peine plus concise. Elle est, par contre, 60% plus rapide sur de très gros fichiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{$1=$1;printf "%s%s%s\n",s,$0,s}' s="'" FS=";" OFS="','" fichier
    Le $1=$1 force un nouveau parse de $0 avec le nouveau OFS.

  11. #11
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 402
    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 402
    Par défaut
    Bonjour,

    Pour une ligne (après reste juste à faire un while read):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ XX="DEQP003;ZBQK002;ZCQK002;..."
    $ echo "'${XX//;/','}'"
    'DEQP003','ZBQK002','ZCQK002','...'

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

Discussions similaires

  1. Problème modification d'un fichier txt
    Par YoshioToutou dans le forum C
    Réponses: 6
    Dernier message: 21/03/2011, 00h10
  2. modification d'un fichier .txt
    Par juliejuliejulie dans le forum MATLAB
    Réponses: 6
    Dernier message: 23/03/2010, 10h43
  3. [Batch] Modification d'un fichier txt par glisser/déposer
    Par L.rod dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 18/09/2009, 14h41
  4. Ouverture et modification d'un fichier .txt
    Par Marty McFly dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 22/05/2006, 10h57

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