Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

viewer .csv en console

32 réponses
Avatar
Kevin Denis
Bonjour,

comme je sais qu'il existe pleins de petits utilitaires en ligne
de commande méconnus, je me demandais s'il y en avait un qui
permettrait de voir des fichiers csv.

Souvent, on cat un .csv, et la largeur des champs des colonnes
fait que ça apparait un peu en vrac:

$ cat file.csv
Jour;nombre de hits;disponibilité;colonne D
Mercredi;8;N;Obiwan
;;;E
Jeudi;Non disponible;;;

et ce n'est pas super simple à lire
si on pouvait avoir:

$ supertool file.csv
Jour; nombre de hits; disponibilité; colonne D
Mercredi; 8; N; Obiwan
; ; ; E
Jeudi; Non disponible; ;

ça serait beaucoup plus pratique.

Une idée?
Merci
--
Kevin

10 réponses

1 2 3 4
Avatar
Francois Lafont
On 13/10/2015 12:48, Dominique MICOLLET wrote:

J'ai effectivement mal compris le cahier des charges et le fonctionnement de
/column/ : j'ai cru que l'option -s définissait le séparateur en entrée ET
en sortie.



Ah, ok pas de problème.

Donc /tr/ ne convient pas. Il faut effectivement disposer de l'option -o de
/column/ ou employer la solution /sed/ que j'ai proposée auparavant.



Alors, pardon d'insister ;), mais la commande *complète* avec le "sed" je veux
bien la voir car, encore une fois, dès l'instant où un des champs du csv contient
lui-même le motif responsable de la séparation des colonnes (à savoir deux
espaces je crois sur "column"), ben c'est la merde (que ce soit avec "sed", "tr"
ou je ne sais quoi). ;)

Désolé pour le bruit.



Aucun souci.

--
François Lafont
Avatar
Dominique MICOLLET
Bonjour

Francois Lafont wrote:
Alors, pardon d'insister ;), mais la commande *complète* avec le "sed" je
veux bien la voir



sed 's/;/t|/g' /tmp/test.csv | expand --tabs

me semble répondre au cahier des charges

Cordialement

Dominique
Avatar
Tonton Th
On 2015-10-13, Dominique MICOLLET wrote:

Alors, pardon d'insister ;), mais la commande *complète* avec le "sed" je
veux bien la voir



sed 's/;/t|/g' /tmp/test.csv | expand --tabs

me semble répondre au cahier des charges



Et si il y a un ';' dans un des champs du CSV, hein, on fait quoi ?

http://www.catb.org/esr/writings/taoup/html/ch05s02.html#id2901882

Le CSV, c'est un peu comme le Xml : au début on pense régler ça
à la regexp, mais en fait, pour gérer tous les cas tordus, il faut
en général un parser adapté.



--
------ http://la.buvette.org/photos/myrys/20ans/fx/mvavrg.avi ------

I'm <tth> on freenode. Film at 11, take your popcorn.
Avatar
Tonton Th
On 2015-10-12, Doug713705 wrote:

$ cat file.csv
Jour;nombre de hits;disponibilité;colonne D
Mercredi;8;N;Obiwan
;;;E
Jeudi;Non disponible;;;

et ce n'est pas super simple à lire
si on pouvait avoir:

$ supertool file.csv
Jour; nombre de hits; disponibilité; colonne D
Mercredi; 8; N; Obiwan
; ; ; E
Jeudi; Non disponible; ;

ça serait beaucoup plus pratique.

Une idée?



Un bout de python à l'arrache ?



Pourquoi à la rache ?

https://docs.python.org/3/library/csv.html


--
------ http://la.buvette.org/photos/myrys/20ans/fx/mvavrg.avi ------

I'm <tth> on freenode. Film at 11, take your popcorn.
Avatar
Francois Lafont
On 13/10/2015 14:12, Dominique MICOLLET wrote:

sed 's/;/t|/g' /tmp/test.csv | expand --tabs



Chez moi, ça donne ça :

---------------------------------------------------
~$ sed 's/;/t|/g' /tmp/test.csv | expand --tabs
Jour |nombre de hits |disponibilité |colonne D
Mercredi |8 |N |Obiwan
| | |E
Jeudi |Non disponible | | |
---------------------------------------------------

On voit donc un petit décalage au niveau de la « cellule »
"disponibilité". C'est dû à la présence du « é » qui compte
pour plusieurs « colonnes » pour la commande expand (dont
j'ai eu un peu de mal à comprendre ce qu'elle faisait
exactement). Si le fichier ne possède que des caractères
ASCII, effectivement la commande ci-dessus fonctionne, mais
sinon plus il y aura de caractères non ASCII plus les
alignements en seront altérés.

Par ailleurs, faut quand même pas choisir la valeur de
--tabs n'importe comment non plus, mais bon au pire on peut
toujours prendre une valeur un peu trop grande.

Merci pour la réponse en tout cas.
À+

--
François Lafont
Avatar
Dominique MICOLLET
Bonjour,

Tonton Th wrote:
Et si il y a un ';' dans un des champs du CSV, hein, on fait quoi ?



On se flagelle : il n'es t p as t r è s f ut é d'ut il is e r l e s épa
rate ur de c ham p da ns u n c ham p.

C'est pour ça que le séparateur classique en unix est ":" (voir
/etc/passwd).

Tonton Th serait un Troll ?

Cordialement

Dominique
Avatar
Dominique MICOLLET
Bonjour,

Francois Lafont wrote:
On voit donc un petit décalage au niveau de la « cellule »
"disponibilité". C'est dû à la présence du « é » qui compte
pour plusieurs « colonnes » pour la commande expand



Oui : je crois - sans certitude - que c'est lié à l'UTF-8 qui doit coder le
é sur deux octets qu'/expand/ compte donc comme deux caractères.

J'ai eu le même problème dans un programme C.

J'avoue ne pas savoir comment le résoudre ni en bash ni en C.

Cordialement

Dominique
Avatar
Tonton Th
On 2015-10-14, Dominique MICOLLET wrote:
Bonjour,

Tonton Th wrote:
Et si il y a un ';' dans un des champs du CSV, hein, on fait quoi ?



On se flagelle : il n'es t p as t r è s f ut é d'ut il is e r l e s épa
rate ur de c ham p da ns u n c ham p.

C'est pour ça que le séparateur classique en unix est ":" (voir
/etc/passwd).

Tonton Th serait un Troll ?



Je suis peut-être un troll, mais dans ma carrière je me suis
déja trouvé plusieurs fois face aux problèmes de lecture de
fichiers CSV, et je sais d'expérience que c'est loin d'être
évident. Il y a une foultitude de cas particuliers, de petites
déviations par rapport à la "norme" pour qu'un jour, et au
mauvais moment, une solution "à la rache" explose en vol.

--
------ http://la.buvette.org/photos/myrys/20ans/fx/mvavrg.avi ------

I'm <tth> on freenode. Film at 11, take your popcorn.
Avatar
Olivier Miakinen
On 14/10/2015 07:36, Dominique MICOLLET wrote:

On voit donc un petit décalage au niveau de la « cellule »
"disponibilité". C'est dû à la présence du « é » qui compte
pour plusieurs « colonnes » pour la commande expand



Oui : je crois - sans certitude - que c'est lié à l'UTF-8 qui doit coder le
é sur deux octets qu'/expand/ compte donc comme deux caractères.



Oui, en effet ça me semble logique.

J'ai eu le même problème dans un programme C.

J'avoue ne pas savoir comment le résoudre ni en bash ni en C.



Si tous les caractères font partie d'un seul jeu de caractères 8 bits,
par exemple ISO-Latin1 ou CP1252, un contournement possible consiste à
convertir le fichier d'UTF-8 dans ce jeu de caractères, puis utiliser
expand, avant de reconvertir en UTF-8.

Mais il faudrait qu'existe une solution plus simple.

En tout cas d'autres se posent la question :
http://superuser.com/questions/116907/how-to-recode-to-utf-8-conditionally
Avatar
Kevin Denis
Le 12-10-2015, Francois Lafont a écrit :
Il y a sûrement plus évolué mais perso j'utilise souvent
la commande column pour faire ce genre de chose :

------------------------------------------------------
~$ column -n -s ';' -t /tmp/test.csv
Jour nombre de hits disponibilité colonne D
Mercredi 8 N Obiwan
E
Jeudi Non disponible
------------------------------------------------------

Bon, tu verras dans la page man que column ne possède pas
des tonnes d'options et que c'est peut-être un peu limité.
Par exemple dans la sortie les colonnes sont délimitées par
des espaces et je ne crois pas qu'on puisse changer cela
(et mettre des '|' par exemple). En tout cas, je n'ai pas
trouvé.



C'est largement suffisant pour avoir un résultat plus visuel.
Merci, et pour les autres suggestions aussi :)
--
Kevin
1 2 3 4