Gambas France BETA


Pas de compte ? Incription

importation de fichier TXT dans un tableau puis effectuer des Tris

123456
AuteurMessages
defcom#46 Posté le 5/8/2010 à 13:43:00
autre question

j'ai tous met label dans un panel pour les incrémenter avec les valeurs du tableau cela fonctionne
mon problème c'est que mais label doivent être superposer avec une plan en fond écran.
si je met un picturebox dans le panel lors de l'incrémentation ca plante car essaye de rentré une valeur sur le picturebox.

l'erreur dit
type mismatch wanted label, got picturebox instead.

je voulais rendre le panel transparent et mettre derrière le picturebox mais j'ai pas trouver le fonction.
Prokopy#47 Posté le 5/8/2010 à 14:02:00
Kinder PinguiAvant tout je voudrais savoir : pourquoi tu tiens absolument à avoir cinquante Label les uns sous les autres plutôt qu'un seul qui contiendrait toutes les valeurs. Tu bouffes trente fois trop de ressources en faisant comme ça et en plus tu t'embêtes pour rien. :|
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
defcom#48 Posté le 5/8/2010 à 14:09:00
chaque label représente une clim et à un emplacement précis sur le plan.

En plus par la suite quand je clique sur le label1 qui correspond par exemple à la clim 1 (CLVCPTB10001) il m'affiche la température, le décalage, est l'occupation qui sont les autres variables du fichiers.

Pour chaque clim j'ai au minimum 4 information à afficher.
defcom#49 Posté le 8/8/2010 à 19:11:00
j'ai l'essaye tomber pour le moment la boucle pour incrémenter mais label.

Pour le moment avec la fonction crée j'importe la température et la dates mais il faudrait qu'en même temps j'importe le 2 autres variables
dans la même boucle car pour le moment j'ai crée 3 fonctions une pour la température, une pour l'occupation (nvoEffectOccup) et un autre pour le décalage (nvoSetptOffset).
c'est une perte de temps car à chaque fois j'ouvre le fichier.

Je suis passé à la version 3 de gambas cela résout le problème avec les graphiques pour définir le max et le min du graphique.

Prokopy#50 Posté le 8/8/2010 à 19:15:00
Kinder PinguiBen pour ça c'est la même chose que pour la température. Tu rajoutes un Else If InStr("nvoEffectOccup"), tu rajoutes la valeur dans le tableau comme pour la température, etc. Je ne vois pas vraiment où est le problème.
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
defcom#51 Posté le 8/8/2010 à 20:24:00
voila ce que j'ai fait

1
fichier = OPEN "donnees4.txt" FOR INPUT 'ouvre le fichierWhile Not Eof(fichier) Line Input #fichier, ligne 'lecture du fichier ligne par ligne If String.InStr(ligne, "nvoEffectOccup") > 0 And String.InStr(ligne, "CLVCP" & Module1.TOUR & Module1.ETAGE) > 0 'Si déjà c'est une ligne nvoSpaceTemp CLVCP While String.InStr(ligne, "CLVCP" & Module1.TOUR & Module1.ETAGE & Format(J, "000")) = 0 'On vérifie ensuite si le nobre qui est dans la "suite" n'existe pas Inc J 'Si c'est le cas, on avance de 1 et on crée une case avec 0 dates.add(Val(Left(ligne, 18))) occupation.Add(0) temperatures.Add(0) decalage.Add(0) Wend dates.Add(Val(Left(ligne, 18))) 'On ajoute les valeurs occupation.Add(Right(ligne, 13)) Inc J 'On incrémente Else If String.InStr(ligne, "nvoSpaceTemp") > 0 And String.InStr(ligne, "CLVCP" & Module1.TOUR & Module1.ETAGE) > 0 'Si déjà c'est une ligne nvoSpaceTemp CLVCP temperatures.Add(Format((CFloat(Right(ligne, 5))), "0,0")) Else If String.InStr(ligneetptOffset") > 0 And String.InStr(ligne, "CLVCP" & Module1.TOUR & Module1.ETAGE) > 0 decalage.Add(CFloat(Right(ligne, 5))) Endif Wend


j'arrive pas à avoir un chiffre à près la virgule dans la température pourtant j'ai utiliser la fonction format

1
temperatures.Add(Format((CFloat(Right(ligne, 5))), "0,0"))


comme récupérer la valeur qui ce trouve dans "nvoEffectOccup" car la taille du texte varie.
manu#52 Posté le 8/8/2010 à 20:52:00
Avec Gambas ca roule !
j'arrive pas à avoir un chiffre à près la virgule dans la température pourtant j'ai utiliser la fonction format



Pour ca, utilise la fonction Round :

Round(monchiffre,-1) te donnera un chiffre avec un chiffre apres la virgule.



Pour le reste de tes questions, j'a idécroché :)


http://gambasdoc.org/help/lang/round?fr
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
defcom#53 Posté le 8/8/2010 à 21:24:00
j'ai essayé avec round mais ca arrondi toujours à l'entier.

j'ai remarquer quelque chose je pense que mon tableau doit être rempli par des chiffres avec des point comme séparateur et non des virgule.
Prokopy#54 Posté le 8/8/2010 à 22:08:00
Kinder PinguiDefcom a raison. En effet, comme dit dans la doc ( ;) ), CFloat ne prend pas en compte la localisation. C'est-à-dire que c'est la notation anglaise qui est utilisée par défaut. Les anglais utilisent le point comme séparateur décimal, alors que nous z'ôtres de la France on utilise la virgule.
Il faut que tu utilises la fonction Val() plutôt que CFloat(). Elle te prendra tes virgules sans problème.
C'était quand même bien vu defcom. :)

Donc manu : 0 ; defcom : 1. :lol!:
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
defcom#55 Posté le 8/8/2010 à 22:49:00
C'est bon ça fonctionne.

merci
Prokopy#56 Posté le 8/8/2010 à 23:08:00
Kinder PinguiAh d'accord. J'avais rien pigé. :oops:

Comme l'a dit manu donc, il faut utiliser round comme ceci :

1
temperatures.Add(Round(CFloat(Right(ligne, 5)), -1))
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
defcom#57 Posté le 8/8/2010 à 23:24:00
je suis toujours à la recherche pour mais label pour les incrémenter dans une boucle.

en VBA j'ai trouver ça

FOR j=1 TO 80
fMain.Controls("Label" & j).Caption = test & j
NEXT j

j'essaye de trouver l'équivalent sur gambas
Prokopy#58 Posté le 8/8/2010 à 23:56:00
Kinder PinguiJe te l'avais pas déjà donné avec MonPanel.Children ?
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
defcom#59 Posté le 9/8/2010 à 00:20:00
si tu me la donner mais je peut pas l'utiliser en état car dans mon conteneur il n'y a pas que des label il y a aussi et des picturebox et autre.
quand je le lance il y a une erreur

si je clique ok et je continue à exécuter le programme ça fonctionne.

faudrait pouvoir ignorer tous les autres contrôles.
Prokopy#60 Posté le 9/8/2010 à 00:29:00
Kinder PinguiAh oui c'est vrai. Excuse je suis vraiment fatigué aujourd'hui…

Le truc c'est de ne modifier le Caption que si l'objet est de type Label. Pour détecter ça on utilise la méthode Object.Type() :

1
DIM enfant AS ControlDim i AS INTEGER = 0FOR EACH enfant IN Panel1.Children IF Object.Type(enfant) = "Label" THEN enfant.Caption = temperatures[i] INC iNext


[troll]C'est quand même plus compréhensible que VB. [/troll] :P
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
123456