Page 1 sur 1

[R] améliorer la vitesse dexécution d'un script

Posté : ven. 18 mars 2011 11:04
par steiner62
Bonjour à tous,

je suis face a un problème délicat j'ai la solution a mon problème initial mais le temps d'exécution de mon script est tellement long que je ne peut pas me permettre de le concidérer comme terminer.

Problèmatique :

Je doit faire un traitement de deux fichiers de taille différente (premier fichier de 355Ko et le second de 6 115Ko) mais de structure identique. Le traitement a effectuer est de lire le fichier, trouver toute les lignes contenant les valeur comprise entre 40100001 et 40199999 et comprise entre 41100001 et 41199999 pour y ajouter à la fin selon le fichier traité une lettre V pour le petit fichier ou M pour le plus gros.

Hors il s'avére que le traitement du plus petit fichier met beaucoup plus de 30 minutes. Le petit fichier contient quand même plus de 86.000 lignes et le plus gros plus de 3.000.000 de lignes. Et je ne peut absolument pas supprimer les retours à la ligne.


Les fichiers :

Voici la structure des fichiers :

Code : Tout sélectionner

#FLG 000
#VER 14
#DEV EUR
#MECG
03
031110
211210
1
100001

4110000
51125000
41136557

WEINBRECK BERNARD
2
4118,69
0,000000
0,00
0
1
166,91
A


0
0
0


0
0
0




0
0,00


#MECG

Mes scripts :

La version 1 du script :
► Afficher le texte
Ou tout est géré en même temps il lit le fichier d'origine et réécrit dans un fichier de destination.

La version 2 du script :
► Afficher le texte
Où la je travaille avec des array en espérent augmenter la vitesse mais ce n'ai pas mieux.

Comment puis je faire pour améliorer la vitesse d'exécution de ceci ? car si je met plus de 30 minutes pour le petit fichier je n'ose imaginer le temps pour le plus gros.

merci de votre aide.

Re: [..] améliorer la vitesse dexécution d'un script

Posté : ven. 18 mars 2011 12:05
par matwachich

Re: [..] améliorer la vitesse dexécution d'un script

Posté : ven. 18 mars 2011 12:19
par softwater
bonjour,

Je suis pas sûr d'avoir tout compris...
Voici ce que j'ai fait,
  • Lecture du fichier ligne par ligne
    ouverture d'un fichier de réception
    réécrit chaque ligne dans le nouveau fichier
    si la valeur est trouvée ajoute V
► Afficher le texte

Re: [..] améliorer la vitesse dexécution d'un script

Posté : ven. 18 mars 2011 12:40
par matwachich
Voila, c'est ça.
Dans le script du premier post vous n'utilisiez pas FileOpen, et si on regarde bien la doc de la fonction FileReadLine:

Code : Tout sélectionner

If a filename is given rather than a file handle - the file will be opened and closed during the function call - for parsing large text files this will be much slower than using filehandles.
 
Dans les gros fichiers, il faut toujours utiliser des handles.

Perso, j'utiliserai plutôt _FileReadToArray, car il est encore plus rapide de traiter un Array (car il est en mémoire) qu'un fichier même en handle!
► Afficher le texte

Re: [..] améliorer la vitesse dexécution d'un script

Posté : sam. 19 mars 2011 03:36
par SagePourpre
Aussi, en changeant la priorité du script
à haute (4) ou temps réel(5)...

Code : Tout sélectionner

ProcessSetPriority(@AutoItPID,5)

Re: [..] améliorer la vitesse dexécution d'un script

Posté : lun. 21 mars 2011 09:08
par steiner62
J'ai honte en lisant vos réponses s'était tellement évident que je n'ai pas vu mon erreur de débutant.

Grand merci de votre aide