Hello,
Nouvelle version
3.10.1
La Drop Zone lit les fichiers texte (associés: *.txt, *.ini) avec un visualiseur interne.
Ce visualiseur reconnait les encodages ASCII, UTF-8 et Unicode (merci ReadStringFormat)
Cela fonctionne très bien, mais c'est lent par rapport à un éditeur ascii quand on passe un fichier de plusieurs milliers de lignes. C'est peut-être normal ?
J'ai essayé plusieurs méthodes, et on peut accélérer, mais pas tant que ça.
Sur mon petit i3, avec un fichier de 7000 lignes (j'abuse) ce code met 9 sec avec la méthode 1 et 2 avec la méthode 2.
Code : Tout sélectionner
EnableExplicit
Define File_Source.s = "C:\Program Files\PureBasic\Compilers\APIFunctionListing.txt" ; 7249 lignes
Define Start.q
Define Stop.q
OpenWindow(0, 0, 0, 800, 600, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(1, 0, 0, 800, 600, #PB_Editor_ReadOnly)
If Not ReadFile(0, File_Source)
Debug "Fichier non trouvé. END"
End
EndIf
Debug "Méthode standard (ajout dans le gadget)"
Start = ElapsedMilliseconds()
While Not Eof(0)
AddGadgetItem(1, -1, ReadString(0))
Wend
Stop = ElapsedMilliseconds()
Debug Str((Stop - Start) / 1000) + " Secondes"
CloseFile(0)
SetGadgetText(1, "")
ClearGadgetItems(1)
ReadFile(0, File_Source)
Debug #CRLF$ + "Méthode mémoire (concaténation puis affectation)"
Start = ElapsedMilliseconds()
Define Full_Text.s
While Not Eof(0)
Full_Text + ReadString(0) + #CRLF$
Wend
SetGadgetText(1, Full_Text)
Stop = ElapsedMilliseconds()
Debug Str((Stop - Start) / 1000) + " Secondes"
CloseFile(0)
While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
J'ai essayé une méthode avec ReadData et PeekS, mais ce n'est pas mieux (enfin comme je l'ai testé)
Sinon, je ferais un test de taille et au delà de 1000 ligne je lance un RunProgramme sur l'éditeur par défaut (ou même notepad)
Ce n'est pas une question de puissance machine ou rapidité disque: je me suis amusé à faire la même chose avec Lazarus et le chargement est instantané
Code : Tout sélectionner
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Lines.LoadFromFile('C:\Program Files\PureBasic\Compilers\APIFunctionListing.txt');
showmessage('OK')
end;
Bon d'accord, Lazarus occupe 1Go sur le disque contre 80 Mo, mais il n'y a rien de magique.
J'ai aussi fait un test avec un vieux VB6 et là ça plante
Question de gadget ou de méthode