Découper un fichier en plusieurs et optimisation [Résolu][Perl] - Perl - Programmation
Marsh Posté le 10-05-2013 à 16:24:53
C'est très très simple, la lenteur, et ça sera pareil avec tout programme ainsi codé, que ce soit en Perl ou autre chose.
Tu fais un open(File) et un close(File) (sans compter une opération de positionnement en fin de fichier) qui sont des opérations lentes une fois par ligne du fichier source, soit 2.2 Million d'opérations de ce type...
A 1/100e de seconde par opération, on serait a plus de 6h
Un script de ce type devrait faire l'affaire:
Code :
|
Le sprintf("%03d", $fnum++) c'est pour avoir des fichiers file001 file002 etc
A+,
Marsh Posté le 10-05-2013 à 18:57:35
Parfait, merci gilou ! Je passe de plusieurs heures à 2 sec...effectivement la mémoire en prenait un gros coup derrière la casquette.
You are the best.
Marsh Posté le 16-01-2014 à 11:06:57
Bonjour,
Le programme fourni par Gilou (lors de la discussion "Découper un fichier en plusieurs et optimisation" ) m'est particulièrement utile.
Cependant je cherche à le modifier quelque peu...
1) Je ne comprends pas les sens de "$. %" sur cette ligne :
Code :
|
.
2) J'essaie de modifier ce programme, pour que la découpe du fichier se fasse selon le contenu de la ligne (et non à la nième ligne).
Je souhaite découper le fichier quand la ligne commence par dièse, sachant que ce qui suit le dièse serait le nom à donner au fichier.
De type :
Code :
|
ça ne fonctionne bien évidemment pas!
Je parviens à découper mon fichier si la ligne commence par "#", mais les nouveaux fichiers ne se nomme pas comme je le souhaite.
Quelqu'un peut-il me dire ce qui cloche.
D'avance merci,
Frelinf
La suite ici: http://forum.hardware.fr/hfr/Progr [...] 1182_1.htm
Marsh Posté le 10-05-2013 à 12:14:57
Bonjour,
J'ai un besoin simple,
J'ai un fichier source toto.csv qui fait 18M et contient 1,1 millions de lignes.
Je souhaite le découper pour en faire autant de fichier de 100 000 lignes que nécessaire.
Pour cela j'ai réalisé un script qui fonctionne, mais le problème c'est qu'il met plusieurs heures !
Ce qui est complètement dingue.
Mon besoin initial était d'importer toto.csv en base MySQL dans une simple table sans aucun index, juste une clé primaire, mais cela met ~70mn (avec un load data infile qui plus est....je m'arrache aussi les cheveux pour comprendre pourquoi).
Alors je me suis dis que faire de même mais sur des fichiers plus petit me ferait gagner du temps et bien là c'est perdu.
Donc voici à quoi ressemble mon fichier source:
Voici mon code:
Message édité par Sethenssen le 10-05-2013 à 18:58:04