Charger ini dans listview plus rapidement

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Mickdu59
Niveau 2
Niveau 2
Messages : 27
Enregistré le : ven. 06 déc. 2019 06:56
Status : Hors ligne

Charger ini dans listview plus rapidement

#1

Message par Mickdu59 »

Bonjour , voila je charge actuellement de gros volumes dans listview via des fichiers ini mais je voudrais savoir s'il est possible de le faire plus rapidement .
Lien de ma vidéo pour voir le temps que je met pour charger plus de 2600 resultats : https://www.youtube.com/watch?v=FtddvHfl6ug

Mon code

Code : Tout sélectionner


Func _tout()

Global $aReg[25][2] = [["A"],["B"],["C"],["D"],["E"],["F"],["G"],["H"],["I"],["J"],["K"],["L"],["M"],["N"],["O"],["P"],["Q"],["R"],["S"],["T"],["U"],["V"],["X"],["Y"],["Z"]]
SplashTextOn($titleapp, "Chargement de la base de donnée", 300, 50, -1, -1, 4, "", 8)
For $iIndex = 0 To UBound($aReg, 1) - 1
   ;MsgBox(0, $aReg[$iIndex][0], "Terminer" ,2)
   $dirsearch = ""&$appdir&"\"&$aReg[$iIndex][0]&".ini"
    $array = IniReadSectionNames($dirsearch)
    ; _ArrayDisplay($array)


    For $i = 1 To $array[0]
        $category = IniRead($iniFile, $array[$i], "Category", "5")
        $desc = IniRead($iniFile, $array[$i], "Desc", "")
	$tag = IniRead($iniFile, $array[$i], "Tag", "")
        $version = IniRead($iniFile, $array[$i], "Version", "")
        $pub = IniRead($iniFile, $array[$i], "Publisher", "")

	GUICtrlCreateListViewItem("" & $array[$i] & "|" & $desc &"|" & $Version &"|" & $pub &"", $ListView0)
        WinSetTitle($Form1, $titleapp, ""&$titleapp&" - Chargement des "&_GUICtrlListView_GetItemCount($ListView0)&" applications")
	 Next


Next
WinSetTitle($Form1, $titleapp, ""&$titleapp&" - "&_GUICtrlListView_GetItemCount($ListView0)&" applications disponibles")
SplashOff()
EndFunc   
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Charger ini dans listview plus rapidement

#2

Message par walkson »

Bonjour,
Il serait bien d'avoir un morceau du ini pour voir sa construction (quelques sections et clefs)
Je pense que la lenteur provient de la lecture de ce ini
Si la construction à chaque section est identique (même nombre de clefs et même nom), un simple txt ou CSV pourrait faire l'affaire et dans ce cas, c'est très rapide ! Exemple:
;=========== List.txt ======================================
nomdesection1|valeur1|valeur2|valeur3|valeur4|valeur5
nomdesection2|valeur11|valeur22|valeur33|valeur44|valeur55
nomdesection3|valeur111|valeur222|valeur333|valeur444|valeur555
nomdesection4|valeur1111|valeur2222|valeur3333|valeur4444|valeur5555


;============================================================
#include <File.au3>
#include <GuiListView.au3>
Global $Array
_FileReadToArray("C:\List.txt", $Array, $FRTA_NOCOUNT , "|")
_GUICtrlListView_AddArray($ListView, $Array)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Mickdu59
Niveau 2
Niveau 2
Messages : 27
Enregistré le : ven. 06 déc. 2019 06:56
Status : Hors ligne

Re: Charger ini dans listview plus rapidement

#3

Message par Mickdu59 »

Merci pour ta réponse

voici comment est constitué le fichier ini

Code : Tout sélectionner

[Motrix]
Switch=agalwood.Motrix
Desc=Motrix is a full-featured download manager that supports downloading HTTP, FTP, BitTorrent, Magnet, etc.
Version=1.6.11
Publisher=AGALWOOD
[Miniconda3]
Switch=Anaconda.Miniconda3
Desc=Miniconda is a free minimal installer for conda. It is a small, bootstrap version of Anaconda that includes only conda, Python, the packages they depend on, and a small number of other useful packages, including pip, zlib and a few others.
Version=py39_4.10.3
Publisher=Anaconda, Inc.
[Multipass]
Switch=Canonical.Multipass
Desc=A lightweight VM Manager that supports cloud-deployment simulation
Version=1.8.0+win
Publisher=canonical
[MiKTeX]
Switch=ChristianSchenk.MiKTeX
Desc=MiKTeX is a modern TeX distribution for Windows.
Version=21.8
Publisher=MiKTeX.org
[MPC-HC]
Switch=clsid2.mpc-hc
Desc=MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback.
Version=1.9.17
Publisher=MPC-HC Team
[MeshLab]
Switch=CNRISTI.MeshLab
Desc=The open source mesh processing system
Version=2021.07
Publisher=Paolo Cignoni - VCG - ISTI - CNR
[MCX Studio]
Switch=coti.mcxstudio
Desc=Monte Carlo eXtreme (MCX) - GPU-accelerated 3D photon transport simulator
Version=0.9.9
Publisher=COTI Lab
[MaxTo]
Switch=DigitalCreations.MaxTo
Desc=The window manager you didn't know you missed. Divide your screen, increase your productivity.
Version=2.2.1
Publisher=Digital Creations AS
[Mobster]
Switch=dillonkearns.mobster
Desc=Pair and mob programming timer for Mac, Windows, and Linux.
Version=0.0.48
Publisher=Dillon Kearns
[MarkRight]
Switch=dvcrn.markright
Desc=a minimalistic github flavored markdown editor
Version=0.1.11
Publisher=dvcrn
[MQTTX]
Switch=emqx.mqttx
Desc=An Elegant Cross-platform MQTT 5.0 Desktop Client
Version=1.6.2
Publisher=EMQ X Team
[Mypal]
Switch=Feodor2.Mypal
Desc=Mypal is a current and maintained Windows XP web browser. Mypal is based on Moonchild Productions' Pale Moon code, which itself was forked from Mozilla's FireFox code several years ago, but is also maintained and kept current.
Version=29.3.0
Publisher=Feodor2
[Mailspring]
Switch=Foundry376.Mailspring
Desc=Boost your productivity and send better email with Mailspring, the best mail client for Mac, Linux, and Windows.
Version=1.9.2
Publisher=Foundry 376, LLC
[Midnight Commander]
Switch=GNU.MidnightCommander
Desc=GNU.MidnightCommander
Version=4.8.26
Publisher=GNU
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Charger ini dans listview plus rapidement

#4

Message par walkson »

Donc vous pouvez utiliser un txt comme je l'explique plus haut

Code : Tout sélectionner

;================= ini en txt ========================================================
$ini = @ScriptDir & "\fich.ini"
$file = FileOpen(@ScriptDir & "\text.txt", 2 + 8)
$arraysection = IniReadSectionNames($ini)
For $i = 1 To $arraysection[0]
	$arrayclef = IniReadSection($ini,$arraysection[$i])
	FileWrite($file,$arraysection[$i] &"|"& $arrayclef[1][1]  &"|"& $arrayclef[2][1]  &"|"& $arrayclef[3][1]  &"|"& $arrayclef[4][1] & @CRLF)
Next
FileClose($file)
;============= txt sur listview ======================================================
#include <File.au3>
#include <Array.au3>
#include <GuiListView.au3>
#include <GUIConstantsEx.au3>
Local $aRetArray
_FileReadToArray(@ScriptDir & "\text.txt", $aRetArray, $FRTA_NOCOUNT , "|")
;_ArrayDisplay($aRetArray,"","",0,Default,"section|Switch|Desc|Version|Publisher")
Global $Form1 = GUICreate("", 506, 438)
Global $ListView = GUICtrlCreateListView("section|Switch|Desc|Version|Publisher", 56, 32, 401, 385)
GUISetState(@SW_SHOW)
_GUICtrlListView_AddArray($ListView, $aRetArray)
_GUICtrlListView_SetColumnWidth($ListView, 0, 100)
_GUICtrlListView_SetColumnWidth($ListView, 1, 100)
_GUICtrlListView_SetColumnWidth($ListView, 2, 100)
While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE
   Exit
 EndSwitch
WEnd
La première partie pour convertir le ini en txt et la deuxième partie pour afficher la listview
Je pense que ce sera beaucoup plus rapide
[édit] J'ai copié le ini en 56000 lignes qui se charge en 3.073 secondes dans la listview
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Mickdu59
Niveau 2
Niveau 2
Messages : 27
Enregistré le : ven. 06 déc. 2019 06:56
Status : Hors ligne

Re: Charger ini dans listview plus rapidement

#5

Message par Mickdu59 »

Merci beaucoup Walkson , le gain de temps est énorme mais je suis confronté a un autre soucis .
Je pense que certain caractère gène dans mon txt donc il ne veut pas le charger .
J'ai essayer de regarder la console pour voir la ou ca bloque mais rien ne veux s'afficher

Je met le contenu intégrale du txt qui dois etre charger si tu veux bien tester
https://textup.fr/599235UW
ou directement le fichier ici
https://1fichier.com/?dbio6rkwkt4vkf01yt4q
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Charger ini dans listview plus rapidement

#6

Message par walkson »

Bonjour,
ça coince à _FileReadToArray() parce que votre txt comporte des erreurs, 2 pour être précis avec des | en trop
Passez le txt dans ce code et il vous indiquera où elles sont
Local $i = 1, $array
While 1
$line = FileReadLine(@ScriptDir & "\text.txt",$i)
If @error Then ExitLoop
$array = StringSplit($line,"|")
If $array[0] <> 5 Then ConsoleWrite($i & ">>" & $array[0] & @CRLF)
$i += 1
WEnd

Pour ma part, j'ai corrigé les erreurs et j'ai monté les données dans le listview sans problème
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Charger ini dans listview plus rapidement

#7

Message par mikell »

pour moi ça marche avec le "application.txt" téléchargé (à part les lignes que walkson a signalé et qui sont zappées), mais les caractères chinois auront du mal à s'afficher :mrgreen:

#include <Array.au3>
#include <GuiListView.au3>
#include <GUIConstantsEx.au3>

$a = FileReadToArray(@ScriptDir & "\application.txt")
Global $Form1 = GUICreate("", 506, 438)
Global $ListView = GUICtrlCreateListView("section|Switch|Desc|Version|Publisher", 56, 32, 401, 385)
_GUICtrlListView_SetColumnWidth($ListView, 0, 100)
_GUICtrlListView_SetColumnWidth($ListView, 1, 100)
_GUICtrlListView_SetColumnWidth($ListView, 2, 100)
For $i = 0 to UBound($a)-1
   GUICtrlCreateListViewItem($a[$i], $ListView)
Next
GUISetState(@SW_SHOW)

While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE
   Exit
 EndSwitch
WEnd
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Charger ini dans listview plus rapidement

#8

Message par walkson »

Il n'y a pas que du chinois, il y a aussi du japonais :mrgreen:
D'ailleurs le texte au https://textup.fr/599235UW est encodé au ANSI et les caractères asiatiques n'apparaissent pas alors qu'à l'adresse https://1fichier.com/?dbio6rkwkt4vkf01yt4q le texte est encodé en UTF-8, les caractères asiatiques apparaissent. Je pense que c'est le site qui fait cette modification lors du téléchargement. On peut forcer le UTF-8 avec les options de FileOpen() sinon il reste la traduction :P
Comme j'ai utilisé application.txt de 1fichier.com, les caractères asiatiques apparaissent dans la Listview
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Répondre