Page 1 sur 1
[R] Base de donnée texte report Liste
Posté : ven. 08 févr. 2013 12:21
par Ks10
Bonjour à tous !
A l'heure actuel j'aimerais pouvoir lire un fichier texte (qui servira de base de stockage) et reporter la totalité du contenue dans un "GuiCtrlCreateList".
Mon fichier est a la racine du dossier et voici les lignes de codes que j'ai utilisé :
Code : Tout sélectionner
Global $file = FileOpen("exadtb.ini", 1)
Global $Form1 = GUICreate("Mon programme", 634, 470, 192, 124)
Global $MenuItem2 = GUICtrlCreateMenu("Fichier")
Global $MenuItem4 = GUICtrlCreateMenuItem("Quitter", $MenuItem2)
Global $MenuItem1 = GUICtrlCreateMenu("Options")
Global $MenuItem3 = GUICtrlCreateMenu("?")
Global $List1 = GUICtrlCreateList("", 0, 0, 633, 409)
Global $Button1 = GUICtrlCreateButton("Mise à jour DataBase", 192, 416, 275, 25)
GUICtrlSetLimit(-1, 200)
GUISetState(@SW_SHOW)
GUICtrlSetData($List1, FileRead($file, 1))
Le but rechercher c'est que à l'ouverture du programme il lit et affiche toutes les lignes qui se trouve dans le fichier "exadtb.ini".
Je précise que quand je lance mon programme avec ce code rien ne s'affiche mais je n'est aucune erreur également.
Je ne trouve pas mon soucis x)
Merci d'avance
Re: [..] Base de donnée texte report Liste
Posté : ven. 08 févr. 2013 13:10
par ani
on ouvre le fichier, on le li et on ferme le fichier.
$file = fileopen("monfichier") ; pourquoi 1 = ecrit a la fin du fichier ?
$hFile = fileread($file) ; idem pourquoi 1 = nbre de caractére lu ici 1, on va pas loin avec çà
fileclose($file)
guictrlsetdata($list1,$hfile)
normalement c'est bon

bonne continuation
ps: le ini est limité attention quand même

Re: [..] Base de donnée texte report Liste
Posté : ven. 08 févr. 2013 13:16
par Ks10
Excellent ça fonctionne

Merci ani.
Ps : Quand je tomberais sur les limites du fichier ini j'envisagerais une autre solution :p
Merci du conseil
Re: [..] Base de donnée texte report Liste
Posté : ven. 08 févr. 2013 13:40
par Ks10
Un autre petit soucis :
Mon programme lit bien le fichier mais il ne comprend pas d'aller à la ligne.
Du coup mon fichier est composé comme sa :
- BLABLABLABLABLABLA
- BLABLABLABLABLABLA
Et dans la liste il affiche :
BLABLABLABLABLABLABLABLABLABLA
Que faut-il faire pour qu'il passe à la ligne ?
J'ai essayer FileReadLine a la place de FileRead cela ne change rien & j'ai essayer aussi @crlf.
Re: [..] Base de donnée texte report Liste
Posté : ven. 08 févr. 2013 14:19
par ani
c simple
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <ListboxConstants.au3>
Global $file = FileOpen("exadtb.ini", 1), $ligne
Global $Form1 = GUICreate("Mon programme", 634, 470, 192, 124)
Global $MenuItem2 = GUICtrlCreateMenu("Fichier")
Global $MenuItem4 = GUICtrlCreateMenuItem("Quitter", $MenuItem2)
Global $MenuItem1 = GUICtrlCreateMenu("Options")
Global $MenuItem3 = GUICtrlCreateMenu("?")
Global $List1 = GUICtrlCreateList("", 0, 0, 633, 409, Not $LBS_SORT) ; IMPORTANT le NOT ;)
While 1
$ligne = FileReadLine($file)
If @error = -1 Then ExitLoop
GUICtrlSetData($List1, $ligne & "|")
Wend
FileClose($file)
....;suite du script
bonne continuation

Re: [..] Base de donnée texte report Liste
Posté : ven. 08 févr. 2013 14:25
par Ks10
Il referme automatiquement mon programme.
Voici le code :
Code : Tout sélectionner
Global $file = FileOpen("exadtb.ini"), $ligne
Global $Form1 = GUICreate("Mon programme", 634, 470, 192, 124)
Global $MenuItem2 = GUICtrlCreateMenu("Fichier")
Global $MenuItem4 = GUICtrlCreateMenuItem("Quitter", $MenuItem2)
Global $MenuItem1 = GUICtrlCreateMenu("Options")
Global $MenuItem3 = GUICtrlCreateMenu("?")
Global $List1 = GUICtrlCreateList("", 0, 0, 633, 409)
Global $Button1 = GUICtrlCreateButton("Mise à jour Base De Données de vos interventions", 192, 416, 275, 25)
GUISetState(@SW_SHOW)
GUICtrlSetLimit(-1, 200)
#EndRegion ### END Koda GUI section ###
While 1
$ligne = FileReadLine($file)
If @error = -1 Then ExitLoop
GUICtrlSetData($List1, $ligne & "|")
$nMsg = GUIGetMsg()
Switch $nMsg
Suite du script blablabla... Wend
Et j'ai pas mit le 1 après sa :
Sinon mon fichier n'est pas lu et les données n'apparait pas.
Re: [..] Base de donnée texte report Liste
Posté : ven. 08 févr. 2013 15:14
par ani
j'avais oublié de retirer le 1 de fileopen.
tu dois garder la boucle while pour la lecture du fichier ligne par ligne comme precedement.
Code : Tout sélectionner
Opt('MustDeclareVars', 1)
#include <GUIConstantsEx.au3>
#include <ListboxConstants.au3>
Global $file = FileOpen("exadtb.ini"), $ligne
Global $Form1 = GUICreate("Mon programme", 634, 470, 192, 124)
Global $MenuItem2 = GUICtrlCreateMenu("Fichier")
Global $MenuItem4 = GUICtrlCreateMenuItem("Quitter", $MenuItem2)
Global $MenuItem1 = GUICtrlCreateMenu("Options")
Global $MenuItem3 = GUICtrlCreateMenu("?")
Global $List1 = GUICtrlCreateList("", 0, 0, 633, 409, [color=#0000FF]Not $LBS_SORT[/color]) ; [color=#FF0000]IMPORTANT le NOT ;)[/color]
While 1
$ligne = FileReadLine($file)
If @error = -1 Then ExitLoop
GUICtrlSetData($List1, $ligne & "|")
Wend
FileClose($file) ; on ferme le fichier précedement ouvert
GuictrlsetLimit($List1,200) ; il affichera au maximum 200 ligne dans la GUICtrlCreateList,
GuiSetState() ; on affiche la gui
Global $Msg = 0
While $Msg <> $GUI_EVENT_CLOSE
$Msg = GuiGetMsg()
Select
Case $Msg = $MenuItem1
;instruction Option
Case $Msg = $MenuItem2
;instruction Fichier
Case $Msg = $MenuItem3
;instruction ?/Help/Aide
Case $Msg = $MenuItem4
Exit ; Ou ExitLoop
EndSelect
Wend
Guidelete()
GuictrlsetLimit($List1,200) je ne l'aurait pas indiquer pour ma part.
Guidelete() detruit la gui après l'appuie de esc ou MenuItem4 voir aide pour de plus ample explication
Re: [..] Base de donnée texte report Liste
Posté : lun. 11 févr. 2013 06:19
par Ks10
Ah, super merci ça fonctionne
Une dernière question ?
GuictrlsetLimit($List1,200) je ne l'aurait pas indiquer pour ma part.
Ne pas mettre cette commande, rendra mon listing illimité au lieu de le restreindre à 200 ?
Re: [..] Base de donnée texte report Liste
Posté : lun. 11 févr. 2013 11:55
par jchd
@ani
Global $List1 = GUICtrlCreateList("", 0, 0, 633, 409,
Not $LBS_SORT) ; IMPORTANT le NOT

Certainement pas !
Balle
♥ pied
Edit:
Ce "Not $LBS_SORT" est un dangereux faux ami.
La constante est un entier et Not un opérateur logique (booléen) et non binaire.
Par bonheur ici, il se trouve que la constante est non nulle, ce qui fait que Not <un entier non nul> évalue à false qui est converti en 0 au moment du passage de paramètre.
Utiliser des constantes explicites au lieu de nombres magiques permet de s'affranchir de la connaissance des valeurs des ces nomberes magiques. Si $LBS_SORT valait 0, alors Not $LBS_SORT vaudrait true donc 1 au passage du paramètre, ce qui ne donnerait pas le résultat escompté.
La façon propre de construire le paramètre voulu est celle Mikell, utilisant BitOR.
Re: [..] Base de donnée texte report Liste
Posté : lun. 11 févr. 2013 12:53
par mikell
jchd a écrit :Certainement pas !
Il existe une syntaxe pour faire l'équivalent ?
Apart le traditionnel style = BitOr($LBS_NOTIFY, $WS_HSCROLL, $WS_VSCROLL, $WS_BORDER)
Re: [..] Base de donnée texte report Liste
Posté : lun. 11 févr. 2013 14:05
par ani
Ca aurait été bien que vous répondiez à la question du y a t'il une limitation pour le contrôle
GUICtrlCreateList.
Je ne serait vous/te dire, mais comme tout contrôle y a une limitation. je ne vois rien dans l'aide qui peut le confirmer.
J'ai testé avec un fichier (301ko comportant 9582 lignes) pas de soucis, le code fournis n'est pas correct, car il lui a fallut + 10 seconde avant d'afficher la gui.
Et çà aurait été bien de le corriger aussi (de te dire ani tu té un peu trompé). (code corrigé plus bas)
Si votre fichier ini comporte 201 ligne vous ne verrez pas la dernière
code corigé
Code : Tout sélectionner
Opt('MustDeclareVars', 1)
#include <GUIConstantsEx.au3>
#include <ListboxConstants.au3>
Global $file = FileOpen("exadtb.ini"), $ligne, [color=#FF0000]$Data[/color]
While 1
$ligne = FileReadLine($file)
If @error = -1 Then ExitLoop
[color=#FF0000]$Data &= $ligne & "|"[/color]
Wend
FileClose($file) ; on ferme le fichier
Global $Form1 = GUICreate("Mon programme", 634, 470, 192, 124)
Global $MenuItem2 = GUICtrlCreateMenu("Fichier")
Global $MenuItem4 = GUICtrlCreateMenuItem("Quitter", $MenuItem2)
Global $MenuItem1 = GUICtrlCreateMenu("Options")
Global $MenuItem3 = GUICtrlCreateMenu("?")
Global $List1 = GUICtrlCreateList("", 0, 0, 633, 409, BitOr($LBS_NOTIFY, $WS_HSCROLL, $WS_VSCROLL, $WS_BORDER))
[color=#FF0000]GUICtrlSetData($List1, $Data)[/color]
;~ GuictrlsetLimit($List1,200) ; il affichera au maximum 200 ligne dans la GUICtrlCreateList,
GuiSetState() ; on affiche la gui
Global $Msg = 0
While $Msg <> $GUI_EVENT_CLOSE
$Msg = GuiGetMsg()
Select
Case $Msg = $MenuItem1
;instruction Option
Case $Msg = $MenuItem2
;instruction Fichier
Case $Msg = $MenuItem3
;instruction ?/Help/Aide
Case $Msg = $MenuItem4
Exit ; Ou ExitLoop
EndSelect
Wend
Guidelete()
voilàvoilà
bonne continuation
Re: [..] Base de donnée texte report Liste
Posté : lun. 11 févr. 2013 14:27
par mikell
Ok ok je réponds
Contrairement à la listview qui est limitée à 65532 lignes, la listbox n'est apparemment pas limitée en nb de lignes (mais le temps d'affichage, c'est une autre histoire)
Code : Tout sélectionner
#include <ListboxConstants.au3>
#include <WindowsConstants.au3>
Global $Form1 = GUICreate("", 300, 500)
Global $List1 = GUICtrlCreateList("", 10, 10, 280, 480, BitOr($LBS_NOTIFY, $WS_HSCROLL, $WS_VSCROLL, $WS_BORDER))
GuiSetState()
$data = ""
For $i = 1 to 10^6
$data &= $i & "|"
Next
GUICtrlSetData($List1, $data)
While GuiGetMsg()<>-3
Wend
Dans le fichier d'aide il n'est pas fait mention d'une limite au nb de lignes d'un fichier ini (quoique s'il est trop long, le script devient une tortue mais c'est une autre histoire)

Re: [..] Base de donnée texte report Liste
Posté : lun. 11 févr. 2013 15:03
par ani
le million, mdr çà lague . on trouvera jamais un fichier de ce genre.
AU pire utilisé le contenu max de windows 256^2 = 65536 ok
le code fourni pas top, tu demande d'afficher la gui et ensuite le contenu de la liste, çà bug.
vaut mieux envoyer le contenu dans la liste et ensuite afficher la gui non? teste tu verra une net difference (sans le million

)
bon codage
Re: [..] Base de donnée texte report Liste
Posté : lun. 11 févr. 2013 16:39
par mikell
ani a écrit :le code fourni pas top
Yes mais on s'en fout, c'est juste pour tester les limites...
le million ! le million !
