Page 1 sur 1
[R] Ecriture dans 2 fichier lente
Posté : mar. 02 déc. 2014 11:17
par Clampu
Salut à tous,
J'ai fait un petit script pour parser un fichier : je lis ligne par ligne, et en écris certains dans fichier1, certains dans fichier2. Or, si je fais comme ça, c'est très lent. Si par contre je fais 2 boucles, l'une écrivant dans fichier1 puis une autre boucle pour écrire dans le fichier2, c'est rapide.
Ma question est : pourquoi ? Autoit est il obliger de fermer fichier1 pour écrire dans fichier2 ?
J'ai bien trouvé la solution, mais le code est pas très claire j'aimerai savoir pourquoi, et s'il était possible de faire ça dans une seule boucle (plus pratique car des lignes sont communes aux 2 fichiers)
Re: [..] Ecriture dans 2 fichier lente
Posté : mar. 02 déc. 2014 11:30
par Faco
Salut,
tu fais peut être des truc en trop, il faudrait que tu post ton code si tu veux que l'on nettoie tout ça

Re: [..] Ecriture dans 2 fichier lente
Posté : mar. 02 déc. 2014 11:46
par Clampu
Je pige pas, j'ai relancé le code qui était lent, il est maintenant aussi rapide que l'autre...
Peut être une lenteur sur le réseau (j'écris pas sur ma machine) ?
Je peux passer en résolu.
Pour info, le code :
► Afficher le texte
Code : Tout sélectionner
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3>
#include <File.au3>
; ------------------------------------------------------------------------------
; Variables
; ------------------------------------------------------------------------------
Local $chemin_IN = @ScriptDir & "\SFINP.NOEMIE_SCP_REJET"
Local $chemin_OUTCMU = @ScriptDir & "\OUTCMU"
Local $chemin_OUTnotCMU = @ScriptDir & "\OUTnotCMU"
Local $critere = ["SNMAT", "SNMA ", "SNMT "]
Local $continueSNMT = False
; ------------------------------------------------------------------------------
; Lecture des fichiers
; ------------------------------------------------------------------------------
; Ouverture du fichier en entrée
Local $hFileOpen = FileOpen($chemin_IN, $FO_READ)
If $hFileOpen = -1 Then
MsgBox($MB_SYSTEMMODAL, "", $chemin_IN & " n'existe pas")
Exit
EndIf
If FileExists($chemin_OUTCMU) Then
FileDelete($chemin_OUTCMU)
EndIf
If FileExists($chemin_OUTnotCMU) Then
FileDelete($chemin_OUTnotCMU)
EndIf
_FileCreate($chemin_OUTCMU)
Local $OUTCMU = FileOpen($chemin_OUTCMU, $FO_READ + $FO_OVERWRITE)
_FileCreate($chemin_OUTnotCMU)
Local $OUTnotCMU = FileOpen($chemin_OUTnotCMU, $FO_READ + $FO_OVERWRITE)
; ------------------------------------------------------------------------------
; Traitement global
; ------------------------------------------------------------------------------
; On traite le fichier ligne par ligne afin d'écrire le nouveau
Local $linesource
While 1
$linesource = FileReadLine($hFileOpen)
If @error = -1 Then
ExitLoop
EndIf
; On écrit si on a un Fichier logique ou un CPAM
If StringMid($linesource, 112, 5) = "SCP01" Or StringMid($linesource, 51, 4) = "01CP" Then
EcrireCMU($linesource)
EcrirenotCMU($linesource)
$continueSNMT = False
ContinueLoop
EndIf
If StringMid($linesource, 51, 5) = "SCMU " Then $continueSNMT = True
If _ArraySearch($critere, StringMid($linesource, 51, 5)) <> - 1 Then $continueSNMT = False ; Si on a trouvé un string du tableau, on ne continue plus de saisir
If $continueSNMT Then
EcrireCMU($linesource)
Else
EcrirenotCMU($linesource)
EndIf
WEnd
FileClose($OUTCMU)
FileClose($OUTnotCMU)
; ------------------------------------------------------------------------------
; Fonctions Annexes
; ------------------------------------------------------------------------------
Func EcrireCMU($mes)
;~ ConsoleWrite($mes & @CRLF)
FileWrite($chemin_OUTCMU, $mes & @CRLF)
EndFunc
Func EcrirenotCMU($mes)
;~ ConsoleWrite($mes & @CRLF)
FileWrite($chemin_OUTnotCMU, $mes & @CRLF)
EndFunc
Re: [R] Ecriture dans 2 fichier lente
Posté : mar. 02 déc. 2014 11:59
par Faco
ton code a pas l'air mauvais, peut être un truc (à vérifier avec les pro):
Code : Tout sélectionner
If FileExists($chemin_OUTCMU) Then
FileDelete($chemin_OUTCMU)
EndIf
If FileExists($chemin_OUTnotCMU) Then
FileDelete($chemin_OUTnotCMU)
EndIf
_FileCreate($chemin_OUTCMU)
Local $OUTCMU = FileOpen($chemin_OUTCMU, $FO_READ + $FO_OVERWRITE)
_FileCreate($chemin_OUTnotCMU)
Local $OUTnotCMU = FileOpen($chemin_OUTnotCMU, $FO_READ + $FO_OVERWRITE)
avec fileopen tu peux créer le fichier et avec overwrite tu écrase son ancien contenu donc le bout de code du dessus peux prendre que 2 lignes (-fileexists,-filedelete et -filecreate)
Re: [R] Ecriture dans 2 fichier lente
Posté : mar. 02 déc. 2014 12:02
par Clampu
Yep pas bête, mais j'ai codé ça vite fait c'était urgent pour un gros fichier donc pas le temps d'optimiser parfaitement. Merci en tous cas
