quel serait le moyen le plus rapide pour déterminer la taille maximum des
colonnes d'un fichier csv ?
exemple :
si le csv contient ça :
col1;col2;col3
abcd;123456;xyz
def;;ddddddddd
le script devrait me donner :
col1 = 4
col2 = 6
col3 = 9
sachant que ces fichiers sont souvent très gros (20 colonnes sur 10000
lignes), il faut un système rapide.
J'ai fait un script "bourin" qui boucle et scan toutes les lignes et toutes
les colonnes, mais pas performant du tout.
Le but est de créer ensuite la structure d'une table dans une base sql afin
d'y importer les données du csv.
Merci pour vos idées.
pmxk
quel serait le moyen le plus rapide pour déterminer la taille maximum des colonnes d'un fichier csv ? exemple :
Peut etre quelque chose du genre:
IFS=" " for ligne in ` cat fichier.csv` ; do echo $ligne | wc -c ; done | sort
-- Kevin
pmxk
"Kevin Denis" a écrit dans le message de news:
quel serait le moyen le plus rapide pour déterminer la taille maximum des
colonnes d'un fichier csv ? exemple :
Peut etre quelque chose du genre:
IFS=" " for ligne in ` cat fichier.csv` ; do echo $ligne | wc -c ; done | sort
-- Kevin
Merci, mais cela ne me donne que la taille totale de la ligne, mais pas des colonnes. La structure de parcours serait plutôt comme ça : cat fichier.csv | while read line do IFS=";" for col in $line mettre les max dans un tableau done done
ça marche, mais c'est trop lent sur des gros fichiers.
A+
"Kevin Denis" <kevin@nowher.invalid> a écrit dans le message de
news:slrnfgudjl.2ga.kevin@slackwall.local.tux...
quel serait le moyen le plus rapide pour déterminer la taille maximum
des
colonnes d'un fichier csv ?
exemple :
Peut etre quelque chose du genre:
IFS="
"
for ligne in ` cat fichier.csv` ; do echo $ligne | wc -c ; done | sort
--
Kevin
Merci, mais cela ne me donne que la taille totale de la ligne, mais pas des
colonnes.
La structure de parcours serait plutôt comme ça :
cat fichier.csv |
while read line
do
IFS=";"
for col in $line
mettre les max dans un tableau
done
done
ça marche, mais c'est trop lent sur des gros fichiers.
quel serait le moyen le plus rapide pour déterminer la taille maximum des
colonnes d'un fichier csv ? exemple :
Peut etre quelque chose du genre:
IFS=" " for ligne in ` cat fichier.csv` ; do echo $ligne | wc -c ; done | sort
-- Kevin
Merci, mais cela ne me donne que la taille totale de la ligne, mais pas des colonnes. La structure de parcours serait plutôt comme ça : cat fichier.csv | while read line do IFS=";" for col in $line mettre les max dans un tableau done done
ça marche, mais c'est trop lent sur des gros fichiers.
A+
Cumbalero
ça marche, mais c'est trop lent sur des gros fichiers.
Tu n'as de toutes façons pas le choix au niveau de l'algo: il faut parser toutes le lignes du fichier, donc quelle que soit l'implémentation (en awk on doit permettre de faire ça plus efficacem ent par exemple), ce sera long et consommateur.
Il me paraitrait bien plus judicieux de faire cela au moment de la génération du fichier csv!
A+ JF
ça marche, mais c'est trop lent sur des gros fichiers.
Tu n'as de toutes façons pas le choix au niveau de l'algo: il faut
parser toutes le lignes du fichier, donc quelle que soit
l'implémentation (en awk on doit permettre de faire ça plus efficacem ent
par exemple), ce sera long et consommateur.
Il me paraitrait bien plus judicieux de faire cela au moment de la
génération du fichier csv!
ça marche, mais c'est trop lent sur des gros fichiers.
Tu n'as de toutes façons pas le choix au niveau de l'algo: il faut parser toutes le lignes du fichier, donc quelle que soit l'implémentation (en awk on doit permettre de faire ça plus efficacem ent par exemple), ce sera long et consommateur.
Il me paraitrait bien plus judicieux de faire cela au moment de la génération du fichier csv!
A+ JF
Thierry B.
--{ pmxk a plopé ceci: }--
cat fichier.csv | while read line do IFS=";" for col in $line mettre les max dans un tableau done done
Il faut être très méfiant avec les CSV. Un jour ou l'autre, tu
vas te retrouver avec un séparateur de champ à l'intérieur d'un champ, et là, *paf* le chien.
"Oui, mais non",42,"Il vaut mieux utiliser un vrai parseur"
-- L'attaque d'Usenet par UTF-8 (film à 22h30)
--{ pmxk a plopé ceci: }--
cat fichier.csv |
while read line
do
IFS=";"
for col in $line
mettre les max dans un tableau
done
done
Il faut être très méfiant avec les CSV. Un jour ou l'autre, tu
vas te retrouver avec un séparateur de champ à l'intérieur d'un
champ, et là, *paf* le chien.
"Oui, mais non",42,"Il vaut mieux utiliser un vrai parseur"
awk 'BEGIN { FS=";"; OFS=";"; lg[1]=0 }; { for (i=1;i<=NF;i++) { if (i>length(lg)) lg[i]=0; if (length($i)>lg[i]) lg[i]=length($i) } }; END { for (i=1;i<=length(lg);i++) $i=lg[i]; print }' t.csv
Sur un très gros fichier, je me demande si c'est gawk ou perl qui va le plus vite...
Cumbalero
Sur un très gros fichier, je me demande si c'est gawk ou perl qui va le plus vite...
D'où ma remarque sur le fait qu'il était plus judicieux de génére r ces stats sur la machine qui crée le csv, il n'y a donc pas besoin de parse r un fichier pour en extraire des stats.
Mais bon, ne pas connaitre la valeur maxi des champs qu'on manipule, toute considération technique mise à part, ça me parait abérant.
A+ JF
Sur un très gros fichier, je me demande si c'est gawk ou perl
qui va le plus vite...
D'où ma remarque sur le fait qu'il était plus judicieux de génére r ces
stats sur la machine qui crée le csv, il n'y a donc pas besoin de parse r
un fichier pour en extraire des stats.
Mais bon, ne pas connaitre la valeur maxi des champs qu'on manipule,
toute considération technique mise à part, ça me parait abérant.
Sur un très gros fichier, je me demande si c'est gawk ou perl qui va le plus vite...
D'où ma remarque sur le fait qu'il était plus judicieux de génére r ces stats sur la machine qui crée le csv, il n'y a donc pas besoin de parse r un fichier pour en extraire des stats.
Mais bon, ne pas connaitre la valeur maxi des champs qu'on manipule, toute considération technique mise à part, ça me parait abérant.
A+ JF
Thierry B.
--{ Cem a plopé ceci: }--
Sur un très gros fichier, je me demande si c'est gawk ou perl qui va le plus vite...
Ou celui qui plantera le plus vite. Le format CSV est fourbe.
-- http://www.columbia.edu/acis/history/029.html
--{ Cem a plopé ceci: }--
Sur un très gros fichier, je me demande si c'est gawk ou perl
qui va le plus vite...
Ou celui qui plantera le plus vite. Le format CSV est fourbe.