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 :
Si quelqu'un a une idée pour optimiser la partie UTF-8, cela me sera d'une grande aide !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Wombowser
Partager