|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : septembre 2004 Messages : 10 ![]() |
Bonjour
Je cherche à redonner à un fichier csv (issu d xls) une structure ou le nombre de colonnes est constant (4 dans l exemple ci-dessous) Je vous expose mon problème par l'exemple Le fichier en entré Citation:
Citation:
Shell : ksh Merci de votre aide |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 946 ![]() |
Faut-il se baser sur les guillemets ouverts (et chercher les guillemets fermés associés) ou juste sur le nombre de ";" dans la ligne ?
Peut-il y avoir un point-virgule dans la chaine ? |
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : septembre 2004 Messages : 10 ![]() |
Je pense qu il faut gerer les 2
Les guillemets me permette de localiser les lignes completes par rapport au lignes incompletes et les Guillemets les "Chaines" à reformater (la coller à la ligne precedente) Normalement je ne dois par avoir de ; dans la partie Chaine Car il peut y avoir le cas encore plus delicat (2 colonnes consecutives avec ce format de type texte d ou les guillements) Citation:
Citation:
|
||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 946 ![]() |
Une solution très simple (utilise gnu sed) :
Le 3 représente le nombre de points-virgules attendu dans chaque ligne (vu que c'est constant). J'espère que ça suffira à tes besoins. Edit : ok, il faudrait peut-être que je gère les guillemets, en fait. Je reposte si j'y arrive. |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : septembre 2004 Messages : 10 ![]() |
J aime bien ta notion du simple
Sinon dans sed pas gnu j ai pas l option -r et sur une plate forme de production je ne suis pas pret de l avoir Je ne pense par pouvoir echapper de toute façon à une boucle |
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 946 ![]() |
Essaie l'option -E de sed, alors. Ca fait la même chose (regexp étendues), ça dépend juste de la version du sed. Si tu n'as pas -E non plus, regarde le man ou dis-le, je modifierai le script.
Et pour la notion de simple, tu vas comprendre dans 2 lignes. Voilà une version qui regroupe les lignes quand il n'y a pas 3 points-virgules ou quand il y a un nombre impair de guillemets : Code GNU sed :
sed -r ':a;/(.*;){3,}/{/^[^"]*(([^"]*"){2})*[^"]*$/b};N;s/\n/ /;ba' La même chose, mais en beaucoup plus portable : Code script.sed :
|
||
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : septembre 2004 Messages : 10 ![]() |
j ai un sed tres .... short
man sed [-n] [-e script] [-f source_file] [file...] |
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 946 ![]() |
Dernière tentative :
Code :
|
||
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : septembre 2004 Messages : 10 ![]() |
J avais essayé de mon coté avec tes scripts mais sans resultats
Et bien merci tout de meme pour les reponses J en aurai vu un peu plus sur le sed
|
|
|
00
|
|
|
#10 | ||||||
|
Membre expérimenté
![]() Inscription : mars 2007 Messages : 469 ![]() |
Pas très compact, mais ça fonctionne avec tes exemples
liste.txt Code :
Code :
Code :
__________________
Loi de Murphy: La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi. La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi. |
||||||
|
|
00
|
|
|
#11 | ||
|
Invité de passage
![]() Inscription : septembre 2004 Messages : 10 ![]() |
Merci
pil poil ce qu'il me faut ![]() PS: je vais ressortir mon bouquin d'Awk ![]() Y a t il moyen de gerer egalement ce cas ? Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com