Gambas France BETA


Pas de compte ? Incription

Les tableaux

12
AuteurMessages
gambix#16 Posté le 14/1/2010 à 18:25:00
Faire simple !je croit que tu n'a pas bien compris comment fonctionait un tableau la ...

Quand tu fait tableau[8,8,8], ça ne veut pas dire que tu a 3 string de 8 caractère. !!!


ça veut dire que tu a 8 X 8 X 8 string a disposition !

Pour stocker les valeur dot tu a besoin tu as besoint d'un tableau de 60 X 3 string par exemple


60 est le nombre de ligne, 3 est le nombre de chaines ! (nom,prénom,adresse)

Mais comme ce système est un peu trop rigide , voici comment faire :

'Un tableau d'objet pour stocker les tableau de chaine
Dim aTable as New Object[]
'Un tableau de chaine
dim aString as string[]
Dim s as string
'Pour chaque ligne du fichier
For each s in split(file.load("myfile"), "\n"))
'Eclater les données séparée par une virgule
'et les stocker dans un tableau de chaine
aString = split(s)
ajouter ce tableau de chaine au tableau d'ojet
aTabble.Add(aString)

Next


maintenant le contenu prénom de la deuxième ligne
Print aTable[1][1]


Simple ?

encore autrement

Créer une classe

dedans :
'CMyClass
PUBLIC Nom as String
PUBLIC Prénom as String
Public Adresse as string


dans le formulaire


Public sub GetFile()

dim hMyClass as CMyClass
Dim aStr as String[]
Dim aObj as New Object[]

For each s in split(file.load("myfile"), "\n")

hMyClass = New CMyClass
aStr = split(s)
hMyClass.Nom = aStr[0]
hMyClass.Prenom = aStr[1]
hMyClass.Adresse = aStr[2]
next


Print aObj[2].Prenom
end
Moins de texte dans une signature c'est agrandir son espace.
Foromus#17 Posté le 29/1/2010 à 11:39:00
je croit que tu n'a pas bien compris comment fonctionait un tableau la ...

Quand tu fait tableau[8,8,8], ça ne veut pas dire que tu a 3 string de 8 caractère. !!!


ça veut dire que tu a 8 X 8 X 8 string a disposition !



Vous êtes gentil quand même !

Bon, je vais voir ce que je peux faire.
Merci beaucoup.
Foromus#18 Posté le 29/1/2010 à 14:48:00
Pour rester sérieux, j'explique - enfin, j'essaie :

J'ai 6 valeurs à stocker. Je pensais utiliser un tableau[6].
Je souhaite pouvoir utiliser une valeur quelconque, par exemple tableau[4], à n'importe quel endroit dans le code sur ma Form.
Si je déclare en début : Public tableau[6] As Integer, c'est refusé.
Si je déclare en début : Dim tableau[6] As Integer, c'est refusé (là, je sais pourquoi)
Si je déclare en début : PUBLIC tableau AS NEW Integer[6], c'est accepté. Mais je ne sais pas utiliser par la suite : Print tableau[6], par exemple, me donne une erreur.

NB : J'ai utilisé des dizaines de tableaux en VB, même à 3 dimensions, je n'ai jamais rencontré un seul souci. Là, ce n'est pas la même chose...
micio#19 Posté le 29/1/2010 à 15:16:00
Voila qui devrait fonctionner.


1
' Gambas module file'''' Dans la déclaration, dimension(s) après le type PUBLIC tb AS String[6]''''SUB main() tb[1] = "toto" PRINT tb[1]END
Foromus#20 Posté le 29/1/2010 à 15:44:00
Désolé, ça n'a pas l'air de coller.
Dans mon cas, c'est déclaré Integer, ce qui ne devrait pas changer grand chose.
La déclaration est bien acceptée (j'avais déjà essayé de mettre la valeur après le type), mais c'est à la première lecture du code que ça coince . En fait, c'est de la syntaxe car je travaille sur une autre feuille que celle de lancement, et l'erreur apparaît, d'emblée, avant même que le programme se lance.
Je suppose qu'au lancement, Gambas parcourt le code à la recherche d'une erreur de déclaration, et ce, sur toutes les feuilles.
J'ai tenté de renseigner les valeurs - elles sont forcément nulles au départ, mais rien n'y fait.
Et pire, je suis certain de buter sur une connerie, un détail, mais que je vois pas ou plus probablement, que je ne connais pas.
Quant à l'aide sur les tableaux, je n'ai pas trouvé grand chose.
micio#21 Posté le 29/1/2010 à 16:22:00
Je ne suis pas sûr de bien comprendre votre demande ?


1
' Gambas class filePUBLIC tb AS Integer[6]PUBLIC SUB Form_Open()ENDPUBLIC SUB Button1_Click() Form02.Show()END

1
' Gambas class filePUBLIC SUB Form_Open() form01.tb[1] = 25 TextBox1.Text = form01.tb[1]END
Foromus#22 Posté le 29/1/2010 à 16:55:00
Effectivement, je me fais mal comprendre. Je résume ;
Mon application a 4 forms, pour l'instant (peu importe, 2, ce serait pareil)
Au lancement, quand ça fonctionne, ma première feuille FMain, est normalement appellée, et fait ce qu'elle a à faire.
Sur cette FMAin, il y a un bouton qui appelle une seconde feuille, càd que dans la Sub Bouton_Click, on a :
Form2.Show
Sur cette Form2, j'ai différentes choses des contrôles et du code dans la Form2.Class
Comme la plupart des feuilles, cette Form2.Class commence par des déclarations, et ensuite par la Sub Form2_Open, soit :

' Gambas class file
PUBLIC Nom AS String
Public MaVariable As Integer
Public Rang As Integer
PUBLIC MonTablo AS Integer[6]

PUBLIC SUB Form_Open()
'etc.

Après, j'ai différentes interventions qui vont assigner des valeurs à Rang et à MaVariable.

Ensuite, et un peu plus loin, j'ai une Sub qui va utiliser le tableau :

Private Sub Copie()
Montablo[Rang] = MaVariable ' Rang et MaVaraible sont déclarées plus haut, donc, accessibles
End

(Je rappelle que tout ça, c'est sur la Form2, appellée depuis la FMain de départ).

Si je lance le programme, F5 ou le triangle, j'ai un message d'erreur instantané à la ligne ci-dessus, soit :

Montablo[Rang] = MaVariable

Le message d'erreur me dit : Pas assez d'arguments à Montablo à la ligne 16 dans Form2.Class.

NB : J'ai bien essayé de mettre des chiffres à la place des variables pour essayer, mais c'est la même chose, ce qui me paraît logique.

Voilà, j'espère avoir été plus clair, c'est vrai que les explications comme ça, en vrac, ce n'est pas forcément évident !
jlouis#23 Posté le 29/1/2010 à 17:13:00
Bonsoir Foromus,

je viens de tester le code...
1
PUBLIC MaVariable AS IntegerPUBLIC Rang AS IntegerPUBLIC MonTablo AS INTEGER[6]PUBLIC SUB Form_Open() Rang = 1 MaVariable = 25 Copie PRINT Montablo[Rang]ENDPRIVATE SUB Copie() Montablo[Rang] = MaVariable END


Je ne pas d'erreur, mais plus haut j'ai vu que tu as déclaré un tableau PUBLIC tableau AS NEW Integer[6], c'est accepté. Mais je ne sais pas utiliser par la suite : Print tableau[6], par exemple, me donne une erreur.

L'erreur est normal, tu dépasses la limite du tableau, dans ce cas tu peux appeler tableau [0-5] pas 6.

J'espère que cela peux t'aider.
micio#24 Posté le 29/1/2010 à 17:24:00
Effectivement on déclare 6 éléments mais les indexes sont numéroté de 0 à 5
jeanyvon#25 Posté le 29/1/2010 à 17:29:00
Gambas? Ma! Et gustoIl n'y a pas que ça!
Foromus écrit d'un coté : "Montableau" et de l'autre "MonTableau". Il faut peut être vérifier la syntaxe.
JY
Vieillir? On peut retarder mais pas y échapper!
Foromus#26 Posté le 29/1/2010 à 17:30:00
Là, je suis en train de devenir fou... Encore que...

J'ai tapé le code de Jlouis dans une feuille toute neuve, et effectivement, ça marche.
La question va donc être : pourquoi ça ne colle pas avec le reste ?...

Bon, pour les index, c'est vrai que ça commence à zéro, mais comme ça ne m'arrange pas, je peux très bien déclarer 6 et ne pas me servir du zéro. Mais dans la déclaration simplifiée [6], est-ce que c'est de 0 à 5 ou de 0 à 6 ?

Je vais voir ça ce soir, là, j'ai un peu mal à la tête....
Foromus#27 Posté le 29/1/2010 à 17:33:00
Il est possible qu'il y ait des erreurs de syntaxe sur les billets du forum, mais dans mon code, je fais (très) attention...
Mais c'est vrai que c'est vite arrivé. Je vais quand même re-vérifier.
Foromus#28 Posté le 29/1/2010 à 19:04:00
Je pense avoir trouvé, sans vraiment comprendre le pourquoi du comment...
12