IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Améliorer la performance d'écriture dans un fichier UTF-8


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Août 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2020
    Messages : 2
    Par défaut 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 : 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
    Si quelqu'un a une idée pour optimiser la partie UTF-8, cela me sera d'une grande aide !

    Wombowser

  2. #2
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    bonjour,

    essaye ceci à la place des lignes 6 à 26 de ton extrait :
    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
    Dim Concat()
    Case "UTF-8"
      ReDim Concat(UBound(MON_FICHIER_LU) - 2	
      For i = 0 to Ubound(MON_FICHIER_LU) - 2
        Concat(i) = MON_FICHIER_LU(i)(0) & DELIMITER & Join(MON_FICHIER_LU(i),DELIMITER)
      Next
      Set FileText = CreateObject("ADODB.Stream")
      With FileText		
        .CharSet = "utf-8"
        .Mode = 3			
        .Open
        .Type = 2
        .Position = 0			
        .WriteText(Join(Concat,vbCrLf),1)
      End With
      FileText.SaveToFile(MON_FICHIER_TGT)
      Set FileText = Nothing
    l'amélioration devrait être sensible
    si tu as besoin de précisions j'essaierais de te répondre mais en ce moment j'ai plage...
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Août 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2020
    Messages : 2
    Par défaut
    Bonjour Omen999,

    J'ai essayé en utilisant la fonction "Join" et l'amélioration de la performance est incroyable.

    Ce qui prenait 24h ne prend maintenant qu'une dizaine de minutes.

    Merci beaucoup et continue à profiter de la plage !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/08/2005, 11h57
  2. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15
  3. Problème d'écriture dans un fichier xml
    Par vanoou dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/07/2005, 02h28
  4. Passer à la ligne lors de l'écriture dans un fichier
    Par hams dans le forum Assembleur
    Réponses: 4
    Dernier message: 17/04/2005, 19h25
  5. [JUnit] Junit écriture dans un fichier
    Par mikael35 dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 10/08/2004, 13h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo