Les vacances sont finies et les problématiques de script reviennent
J'ai déjà réalisé précédemment en petit parser de fichier HTML pour retrouver du code dans une page et je souhaite aujourd'hui étendre ce mode de recherche sur un fichier de message Mail issu de thunderbird (le fichier fait 16 Mo, mais peut monter jusqu'à 100 Mo).
Mon script aujourd'hui consiste juste à trouver le numéro de ligne du fichier qui marque le début de chaque message : un ligne commençant par 'From -' et à noter ces numéros de ligne dans un fichier.
Voici le code
Code : Tout sélectionner
#Include <File.au3>
#include<Array.au3>
$fichier = "Inbox"
$nbr_lignes = _FileCountLines($fichier)
MsgBox(0, "Comptage",$nbr_lignes )
$fp = FileOpen($fichier, 0) ; on ouvre le fichier Inbox
$file = FileOpen("result.txt", 1) ; on ouvre le fichier result.txt
$contenu = "" ;mise à zéro de la variable contenu
$nbr_messages = 0
$index_debut_mail = 0
For $i = 1 To $nbr_lignes
$contenu = ""
$lignesX = FileReadLine($fp, $i)
$trouve = StringInStr($lignesX,"From -",1) ; on cherche la chaine "From -"
if $trouve <> 0 Then ; quand on la trouve c'est qu'on a la ligne avec la valeur que l'on cherche cherche
$index_debut_mail = $i
$nbr_messages = $nbr_messages + 1
;Check if file opened for writing OK
If $file = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
FileWriteLine($file, $index_debut_mail & @CRLF)
EndIf
Next
MsgBox(0, "Fin de programme","il y a "&$nbr_messages&" dans le fichier traité" )
MsgBox(0, "Fin de programme","le programme est terminé" )
FileClose($fp)
FileClose($file)
Autant la lecture du nombre de ligne du fichier est très rapide (240 000 lignes) en 3 sec, mais ensuite le parsing est lent et come le temps d'éxécution est long, le script 'pause'.
j'arrive à peine à traiter 21 000 lignes.
j'utilise pourtant les file handle pour FileOpen, je me demande ou se situe le souci (peut être une limitation que je ne connais pas...)
question subsidiaire : avec les file handle, le fichier à traiter est il chargé intégralement en mémoire ou bien traité plutôt comme un flux ?
Merci pour votre aide et vos lumières





