Supprimer des espaces dans des zones délimitées par des points-virgule
4 réponses
Marbolito
Bonjour,
Je dispose d'un fichier =AB texte =BB dans lequel j'ai des zones
d=E9limit=E9es par des points-virgules (utilisable pour Excel). Ce
fichier a =E9t=E9 g=E9n=E9r=E9 par un programme Microfocus et j'aimerais,
=E0 l'issue de l'ex=E9cution de ce programme, supprimer les espaces
entre chaque point-virgule.
Je m'explique...
Le programme me g=E9n=E8re les informations suivantes :
JEAN ;DUPONT ; ;15 RUE DE LA PAIX ;78100 ;SAINT
GERMAIN EN LAYE
Je voudrais que le r=E9sultat final soit le suivant :
JEAN ;DUPONT ;;15 RUE DE LA PAIX ;78100 ;SAINT GERMAIN EN LAYE
=20
Avez-vous une solution =E0 me proposer ?=20
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Vincent Lefevre
Dans l'article , Marbolito écrit:
Le programme me génère les informations suivantes : JEAN ;DUPONT ; ;15 RUE DE LA PAIX ;78100 ;SAINT GERMAIN EN LAYE
Je voudrais que le résultat final soit le suivant : JEAN ;DUPONT ;;15 RUE DE LA PAIX ;78100 ;SAINT GERMAIN EN LAYE
Avez-vous une solution à me proposer ?
Un truc du style: perl -pe 's/ +;/ ;/g; s/(?<=;) ;/;/g' <fichier>
Le "s/ +;/ ;/g;" permet de remplacer une suite non nulle d'espaces suivie d'un point-virgule par une seule espace suivie d'un point-virgule, et le "s/(?<=;) ;/;/g" permet de supprimer une espace entre 2 points-virgules. Noter qu'on ne peut pas utiliser "s/; ;/;;/g" car une seule espace serait supprimée dans "; ; ;". Je ne sais pas si c'est ce que tu veux exactement, mais ça suit l'exemple ci-dessus, ainsi que:
$ echo 'ab ; ; ; ;cd; ef ; g' | perl -pe 's/ +;/ ;/g; s/(?<=;) ;/;/g' ab ;;;;cd; ef ; g
Dans l'article <1148587219.165984.271310@j55g2000cwa.googlegroups.com>,
Marbolito <thierry.labille@gmail.com> écrit:
Le programme me génère les informations suivantes :
JEAN ;DUPONT ; ;15 RUE DE LA PAIX ;78100 ;SAINT
GERMAIN EN LAYE
Je voudrais que le résultat final soit le suivant :
JEAN ;DUPONT ;;15 RUE DE LA PAIX ;78100 ;SAINT GERMAIN EN LAYE
Avez-vous une solution à me proposer ?
Un truc du style: perl -pe 's/ +;/ ;/g; s/(?<=;) ;/;/g' <fichier>
Le "s/ +;/ ;/g;" permet de remplacer une suite non nulle d'espaces
suivie d'un point-virgule par une seule espace suivie d'un
point-virgule, et le "s/(?<=;) ;/;/g" permet de supprimer une
espace entre 2 points-virgules. Noter qu'on ne peut pas utiliser
"s/; ;/;;/g" car une seule espace serait supprimée dans "; ; ;".
Je ne sais pas si c'est ce que tu veux exactement, mais ça suit
l'exemple ci-dessus, ainsi que:
$ echo 'ab ; ; ; ;cd; ef ; g' | perl -pe 's/ +;/ ;/g; s/(?<=;) ;/;/g'
ab ;;;;cd; ef ; g
Le programme me génère les informations suivantes : JEAN ;DUPONT ; ;15 RUE DE LA PAIX ;78100 ;SAINT GERMAIN EN LAYE
Je voudrais que le résultat final soit le suivant : JEAN ;DUPONT ;;15 RUE DE LA PAIX ;78100 ;SAINT GERMAIN EN LAYE
Avez-vous une solution à me proposer ?
Un truc du style: perl -pe 's/ +;/ ;/g; s/(?<=;) ;/;/g' <fichier>
Le "s/ +;/ ;/g;" permet de remplacer une suite non nulle d'espaces suivie d'un point-virgule par une seule espace suivie d'un point-virgule, et le "s/(?<=;) ;/;/g" permet de supprimer une espace entre 2 points-virgules. Noter qu'on ne peut pas utiliser "s/; ;/;;/g" car une seule espace serait supprimée dans "; ; ;". Je ne sais pas si c'est ce que tu veux exactement, mais ça suit l'exemple ci-dessus, ainsi que:
$ echo 'ab ; ; ; ;cd; ef ; g' | perl -pe 's/ +;/ ;/g; s/(?<=;) ;/;/g' ab ;;;;cd; ef ; g
Je vous remercie pour la solution proposée : elle me convient à 99%. Pouvez-vous m'indiquer la syntaxe afin de supprimer l'espace juste avant le point-virgule ?
Je m'explique : Au lieu d'avoir "ab ;;;;cd; ef ; g" j'aimerais avoir comme résultat "ab;;;;cd; ef; g"
merci
Bonjour,
Je vous remercie pour la solution proposée : elle me convient à 99%.
Pouvez-vous m'indiquer la syntaxe afin de supprimer l'espace juste
avant le point-virgule ?
Je m'explique :
Au lieu d'avoir "ab ;;;;cd; ef ; g" j'aimerais avoir comme résultat
"ab;;;;cd; ef; g"
Je vous remercie pour la solution proposée : elle me convient à 99%. Pouvez-vous m'indiquer la syntaxe afin de supprimer l'espace juste avant le point-virgule ?
Je m'explique : Au lieu d'avoir "ab ;;;;cd; ef ; g" j'aimerais avoir comme résultat "ab;;;;cd; ef; g"
merci
JustMe
Marbolito a écrit
Bonjour,
Je vous remercie pour la solution proposée : elle me convient à 99%. Pouvez-vous m'indiquer la syntaxe afin de supprimer l'espace juste avant le point-virgule ?
Je m'explique : Au lieu d'avoir "ab ;;;;cd; ef ; g" j'aimerais avoir comme résultat "ab;;;;cd; ef; g"
merci
sed 's/ *;/;/g'
Marbolito a écrit
Bonjour,
Je vous remercie pour la solution proposée : elle me convient à 99%.
Pouvez-vous m'indiquer la syntaxe afin de supprimer l'espace juste
avant le point-virgule ?
Je m'explique :
Au lieu d'avoir "ab ;;;;cd; ef ; g" j'aimerais avoir comme résultat
"ab;;;;cd; ef; g"
Je vous remercie pour la solution proposée : elle me convient à 99%. Pouvez-vous m'indiquer la syntaxe afin de supprimer l'espace juste avant le point-virgule ?
Je m'explique : Au lieu d'avoir "ab ;;;;cd; ef ; g" j'aimerais avoir comme résultat "ab;;;;cd; ef; g"
merci
sed 's/ *;/;/g'
Marbolito
ça me convient parfaitement : je vous remercie tous les deux
ça me convient parfaitement : je vous remercie tous les deux