[R] Base de donnée texte report Liste

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
Avatar du membre
Ks10
Niveau 6
Niveau 6
Messages : 282
Enregistré le : mer. 25 avr. 2012 20:38
Status : Hors ligne

[R] Base de donnée texte report Liste

#1

Message 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
Modifié en dernier par Ks10 le mer. 20 févr. 2013 06:07, modifié 3 fois.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Base de donnée texte report Liste

#2

Message 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 ;)
Avatar du membre
Ks10
Niveau 6
Niveau 6
Messages : 282
Enregistré le : mer. 25 avr. 2012 20:38
Status : Hors ligne

Re: [..] Base de donnée texte report Liste

#3

Message par Ks10 »

Excellent ça fonctionne :P
Merci ani.

Ps : Quand je tomberais sur les limites du fichier ini j'envisagerais une autre solution :p
Merci du conseil
Avatar du membre
Ks10
Niveau 6
Niveau 6
Messages : 282
Enregistré le : mer. 25 avr. 2012 20:38
Status : Hors ligne

Re: [..] Base de donnée texte report Liste

#4

Message 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.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Base de donnée texte report Liste

#5

Message 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 ;)
Avatar du membre
Ks10
Niveau 6
Niveau 6
Messages : 282
Enregistré le : mer. 25 avr. 2012 20:38
Status : Hors ligne

Re: [..] Base de donnée texte report Liste

#6

Message 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 :

Code : Tout sélectionner

Global $file = FileOpen("exadtb.ini"), $ligne
Sinon mon fichier n'est pas lu et les données n'apparait pas.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Base de donnée texte report Liste

#7

Message 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
Avatar du membre
Ks10
Niveau 6
Niveau 6
Messages : 282
Enregistré le : mer. 25 avr. 2012 20:38
Status : Hors ligne

Re: [..] Base de donnée texte report Liste

#8

Message par Ks10 »

Ah, super merci ça fonctionne :D

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 ?
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Base de donnée texte report Liste

#9

Message 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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Base de donnée texte report Liste

#10

Message 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)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Base de donnée texte report Liste

#11

Message 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
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Base de donnée texte report Liste

#12

Message par mikell »

Ok ok je réponds :mrgreen:
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) :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Base de donnée texte report Liste

#13

Message 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
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Base de donnée texte report Liste

#14

Message 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 ! Image
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre