Améliorer la performance d'écriture dans un fichier UTF-8
Bonjour à tous,
Je suis actuellement en train de travailler sur un VBS pour concaténer plusieurs fichiers csv en un unique fichier.
Les points d'attention sont les suivants :
- Il y a 6 fichiers UTF-8 à concaténer et chaque fichier fait environ 70 000 lignes
- Les 20 premières lignes de chaque fichier sont à ignorer sauf pour le premier car la 20ème contient les entêtes de ligne
Mon problème actuellement est la performance du code utilisé. Il fonctionne correctement mais prend plus d'une heure pour traiter les 20 000 premières lignes et le temps de traitement par ligne augmente au fur et à mesure. Ce code devant tourner tous les jours, un temps de traitement supérieur à 24h n'est évidemment pas acceptable.
Après plusieurs tests, la partie qui pose problème est l'écriture des fichiers (leur lecture ne prend que quelques minutes).
Le code pour écrire dans mon nouveau fichier cible est le suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| Sub ECRIRE_FICHIER(MON_FICHIER_TGT, ByRef MON_FICHIER_LU, FILE_TYPE_NAME, DELIMETER)
Dim FileText
Dim i,j, BufferLine
Select Case FILE_TYPE_NAME
Case "UTF-8"
BufferLine = ""
For i=0 to Ubound(MON_FICHIER_LU)-2
end if
BufferLine = BufferLine & MON_FICHIER_LU(i)(0)
For j=0 to UBound(MON_FICHIER_LU(i))
BufferLine = BufferLine & DELIMETER & MON_FICHIER_LU(i)(j)
Next
BufferLine = BufferLine & vbCrLf
Next
Set FileText = CreateObject("ADODB.Stream")
With FileText
.CharSet = "utf-8"
.Mode = 3
.Open
.Type = 2
.Position = 0
.WriteText(BufferLine)
End With
FileText.SaveToFile(MON_FICHIER_TGT)
Set FileText = Nothing
Case "ANSI"
Set FileText = CreateObject("Scripting.FileSystemObject").OpenTextFile(MON_FICHIER_TGT,2,True,0)
For i=0 to Ubound(MON_FICHIER_LU)
BufferLine = BufferLine & MON_FICHIER_LU(i)(0)
For j=0 to UBound(MON_FICHIER_LU(i))
BufferLine = BufferLine & DELIMETER & MON_FICHIER_LU(i)(j)
Next
FileText.WriteLine(BufferLine)
BufferLine = ""
Next
FileText.Close
Set FileText = Nothing
End Select
End Sub |
Si quelqu'un a une idée pour optimiser la partie UTF-8, cela me sera d'une grande aide !
Wombowser