leomalglaive
Messages postés1Date d'inscriptionvendredi 28 novembre 2008StatutMembreDernière intervention 5 décembre 2008
-
5 déc. 2008 à 10:50
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 2010
-
5 déc. 2008 à 17:56
Bonjour,
je suis newbie en vbs, j'ai donc demandé à un ami de m'aider à faire un p'tit script vbs pour un tri de fichier. Son tri est parfait pour les petits fichiers, mais j'ai testé avec avec un fichier de 12Mo (soit 150000 lignes) et là au bout de 15mn, toujours rien.
Pouvez-vous m'aider à optimiser ce code? Merci
Dim nNbLignes 'variable qui servira à stocke le nombre de lignes
Dim sLigneLue ' variable qui contiendra la ligne lue du fichier
Dim bFinBoucle 'booléen qui va nous servir uniquement pour le traitement de tri
Dim i ' pas besoin de le détaille celui-là
Dim z 'idem
Dim sChaineTampon 'chaine tampon servant uniquement pour la copie lors du tri
Set Fso = CreateObject("Scripting.FileSystemObject" ) 'déclaration d'un objet file system
Set Ftxt = Fso.OpenTextFile("result.txt", 1) 'on ouvre le fichier en lecture
nNbLignes = 0
Do While Not Ftxt.AtEndOfStream 'on parcourt le fichier une fois pour avoir son nombre de lignes
nNbLignes = nNbLignes + 1
'On va définir un tableau contenant nos lignes et leur date pour les trier
ReDim Preserve Tableau(nNbLignes)
sLigneLue = Ftxt.ReadLine
Tableau(nNbLignes) = sLigneLue ' on stocke dans la deuxième colonne la ligne intégrale
Loop
'On ferme le fichier
Ftxt.Close
'On libère la mémoire
Set Ftxt = Nothing
'boucle de parcours du tableau pour tri
Do
bFinBoucle = 0
For i = 1 To nNbLignes - 1
If left(Tableau(i),17) > left(Tableau(i+1),17) Then
For z = i To nNbLignes - 1
sChaineTampon = Tableau(z)
Tableau(z) = Tableau(z+1)
Tableau(z+1) = sChaineTampon
Next
bFinBoucle = 1
End If
Next
Loop While bFinBoucle = 1
'une fois notre tableau trié on écrit les lignes dans un nouveau fichier
Set FSys = CreateObject("Scripting.FileSystemObject")
Set Ftxt2 = FSys.CreateTextFile("c:\test\v3\result2.txt")
For i = 1 to nNblignes
Ftxt2.WriteLine Tableau(i)
Next
'On ferme le fichiers
Ftxt2.Close
'On libère la mémoire
Set Ftxt2 = Nothing
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 5 déc. 2008 à 17:56
Bonjour leomalglaive
Pour ce qui est du ReDim, NHenry a raison : lors du chargement du fichier, ton tableau est redimensionné 150000 fois !
Et une fois que cette phase est finie, ton programme n'est pas au bout de ses peines, puisqu'il trie le tableau par la technique du Bubble Sort, le plus lent des algorithmes de tri.
Ton algo est, comme tu le dis, parfait pour les petits fichiers, mais complètement inutilisable pour l'usage que tu veux en faire.