[VBA] Lecture fichier texte

Lecture fichier texte [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 28-10-2017 à 22:53:25    

Bonjour
je souhaite lire le contenu d'un fichier texte et récupérer des informations dedans
le fichier texte est compose de ce genre de ligne
D53110000%toto
D53110000%titi
il y a 100 000 lignes
 
j'ai une listview avec les n° en colonne 1 je voudrais mettre les toto et titi en colonne 2
dans le cas bien sur ou le n° est connu
 
ce code mets 3s pour 10 n°

Code :
  1. Private Sub CommandButton1_Click()
  2. Dim tp!
  3. tp = Timer
  4. ListView1.ListItems.Clear
  5. ListView1.ListItems.Add , , "D53110000"
  6. ListView1.ListItems.Add , , "D53110001"
  7. ListView1.ListItems.Add , , "D53110002"
  8. ListView1.ListItems.Add , , "D53110003"
  9. ListView1.ListItems.Add , , "D53110004"
  10. ListView1.ListItems.Add , , "D53110005"
  11. ListView1.ListItems.Add , , "D53110006"
  12. ListView1.ListItems.Add , , "D53110007"
  13. ListView1.ListItems.Add , , "D53110008"
  14. ListView1.ListItems.Add , , "D53110009"
  15. FichierBDD = Environ("userprofile";) & "DocumentsBDD MacroControleDeroplan SA.txt"
  16. For i = 1 To 10
  17.     L = ListView1.ListItems(i).Text
  18.     L = Left(L, 9)
  19.     Open FichierBDD For Input As #1
  20.         Do While Not EOF(1)
  21.           Input #1, ligneBDD
  22.           If ligneBDD Like L & "*" Then
  23.             ListView1.ListItems(i).ListSubItems.Add = Split(ligneBDD, "%";)(1)
  24.             Me.Repaint
  25.           End If
  26.         Loop
  27.     Close #1
  28. Next i
  29. Me.Caption = "Duration of treatment: " & Format(Timer - tp, "0.000s";)
  30. End Sub


ce code mets 9s pour 10 n°

Code :
  1. Private Sub CommandButton2_Click()
  2. Dim tp!
  3. tp = Timer
  4. ListView1.ListItems.Clear
  5. ListView1.ListItems.Add , , "D53110000"
  6. ListView1.ListItems.Add , , "D53110001"
  7. ListView1.ListItems.Add , , "D53110002"
  8. ListView1.ListItems.Add , , "D53110003"
  9. ListView1.ListItems.Add , , "D53110004"
  10. ListView1.ListItems.Add , , "D53110005"
  11. ListView1.ListItems.Add , , "D53110006"
  12. ListView1.ListItems.Add , , "D53110007"
  13. ListView1.ListItems.Add , , "D53110008"
  14. ListView1.ListItems.Add , , "D53110009"
  15. FichierBDD = Environ("userprofile";) & "DocumentsBDD MacroControleDeroplan SA.txt"
  16. 'ex: D53110000%toto
  17. For i = 1 To 10
  18.     L = ListView1.ListItems(i).Text
  19.     L = Left(L, 9)
  20. Set fso = CreateObject("Scripting.FileSystemObject";)
  21.   Set f = fso.OpenTextFile(FichierBDD, ForReading, False)
  22. Do While Not f.AtEndOfStream
  23.     ligneBDD = f.ReadLine
  24.         If ligneBDD Like L & "*" Then
  25.             ListView1.ListItems(i).ListSubItems.Add = Split(ligneBDD, "%";)(1)  'recupere toto
  26.             Me.Repaint
  27.         End If
  28. Loop
  29. Set f = Nothing
  30. Next i
  31. Me.Caption = "Duration of treatment: " & Format(Timer - tp, "0.000s";)
  32. End Sub


dans les 2 codes, j'ouvre 10 fois le fichier, ce qui ne me semble pas très malin
je voudrais bien l'ouvrir 1 fois, mais je n'arrive pas a le formuler correctement
 
j'ai pourtant essayé..

Spoiler :

Set fso = CreateObject("Scripting.FileSystemObject";)
  Set f = fso.OpenTextFile(FichierBDD, ForReading, False)
   
For i = 1 To 10
    L = ListView1.ListItems(i).Text
    L = Left(L, 9)
Do While Not f.AtEndOfStream
    ligneBDD = f.ReadLine
        If ligneBDD Like L & "*" Then
            ListView1.ListItems(i).ListSubItems.Add = Split(ligneBDD, "%";)(1)  'recupere toto
            Me.Repaint
        End If
Loop
 
Next i
 
Set f = Nothing
 


Message édité par daniel-12 le 29-10-2017 à 12:44:15
Reply

Marsh Posté le 28-10-2017 à 22:53:25   

Reply

Marsh Posté le 29-10-2017 à 09:53:34    

Bonjour,
 
Ouvres le fichier avant de boucler 10 fois !


---------------
Cordialement, Patrice
Reply

Marsh Posté le 29-10-2017 à 10:56:25    

c'est ce que j'ai fais avec le dernier code dans le spoiler
ça marche pour 1 ligne, mais arrivé atendofstream .. c'est fini

Reply

Marsh Posté le 29-10-2017 à 12:39:23    

 
             Bonjour,
 
             déjà préciser langage et logiciel !
             VBA ? Mais vu le mélange avec du VBScript, cela peut ramer sans compter la boucle et surtout le  Repaint  !
 
             La lecture globale d'un fichier texte peut s'effectuer en pur VBA en une passe directement en mémoire dans une variable tableau.
 
             Effectuer une présentation claire & exhaustive …
 
             « dans le cas bien sur ou le n° est connu »  :  en clair, sans décodeur ? Envisager une  Collection  ou un Dictionary
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed