Gambas France BETA


Pas de compte ? Incription

[Résolu]Tableau 2d a la volée...GB3

Ce sujet est résolu.

1
AuteurMessages
loki#1 Posté le 14/8/2010 à 10:14:00
Bonjour gambassiens,

Voila, j'ai un problème sur les tableaux 2d crées a la volée, je n'arrive pas a les remplir :oops:
Prenons un fichier texte(Text1) a mettre dans un tableau(sTableauFinal)
1
Text1: un a z e r 7 8 9de q s d f 4 5 6tr w x c v 1 2 3

Je fais comme ca
1
PUBLIC SUB Form_Open()DIM sFichierText1Chemin AS STRING = Application.Path & "/Text1"DIM hFichierText1 AS FileDim iCompteurDeLigne AS IntegerDim sTableauFinal AS NEW STRING[4, 9]hFichierText1 = OPEN sFichierText1Chemin FOR ReadWhile NOT Eof(hFichierText1)INC iCompteurDeLigneInput #hFichierText1, sTableauFinal[iCompteurDeLigne, 1], sTableauFinal[iCompteurDeLigne, 2], sTableauFinal[iCompteurDeLigne, 3], sTableauFinal[iCompteurDeLigne, 4], sTableauFinal[iCompteurDeLigne, 5], sTableauFinal[iCompteurDeLigne, 6], sTableauFinal[iCompteurDeLigne, 7], sTableauFinal[iCompteurDeLigne, 8]WendEnd

avec un tableau fixe ca fonctionne mais si je remplace:
1
DIM sTableauFinal AS NEW STRING[4, 9]
par
1
DIM sTableauFinal AS NEW String[][]
je n'arrive plus a remplir mon tableau, j'y suis depuis hier, rien a faire :cry:

Sachant que mon fichier texte original a 106 éléments par ligne et un nombre de ligne en constante évolution (plus de 150), jusqu'à maintenant je surdimensionnait mon tableau (sTableauFinal As New String[300, 107]) je copiai chaque ligne dans un fichier temp en remplaçant les espaces pas des entrées et je chargeai chaque lignes du fichier temp dans mon tableau et comme ca pour toutes les lignes de mon fichier, il doit y avoir plus simple non ? moi je voudrai ne pas a avoir a surdimensionner mon tableau, ne pas créer de fichier tampon (temp) et remplir mon tableau en même temps qu'il lis le fichier (Text1).

Mais déjà es ce possible de créer un tableau a la volée en 2d ?

merci d'avance :D
loki
Dell Vostro 3750
Ubuntu 13.04 - Gambas 3.4.1
gambix#2 Posté le 14/8/2010 à 20:19:00
Faire simple !Private $aTab As New String[][]
Public Sub main()

Dim s As String

For Each s In Split(File.Load("Text1"), "\n")

$aTab.Add(Split(s, " "))

Next

End


et hop :)


bon maintenant quelques expilcations :

private $sTab as string[][]

créé en faite un tableau d'objet contenant des variable de type string[]

cest des variable dynamique non instanciée

donc a chaque fois qu'on veut ajouter une chaine il faut faire
mystarray = new string[]
$sTab.add(mystarray)

voila

split retourne un tableau instancié généré a partir de la découpe d'une chaine suivant un symbole dans ton cas un espace

Moins de texte dans une signature c'est agrandir son espace.
loki#3 Posté le 14/8/2010 à 21:24:00
wouah, tu ma cassé le morale, tu as fait en 2 mn et 3 lignes, ce que j'ai fait en 2 h et 30 lignes :shock:

Merci, ca fonctionne très bien...les finesses de la crevette bleu :roll:

Pourquoi un $ devant la variable $aTab(ça marche aussi sans) quelle est sont utilité(c'est ça qui créé la variable dynamique (non instanciée)???) ?

a+
loki
Dell Vostro 3750
Ubuntu 13.04 - Gambas 3.4.1
gambix#4 Posté le 14/8/2010 à 21:56:00
Faire simple !c'est une convention de nommage ! ..; une bonne habitude a prendre quand on nomme ses variable ... le $ signifie variable globale.

A suivre :
http://gambasdoc.org/help/doc/naming?fr

Plus vieux mais toujour utile :
http://gambasdoc.org/help/doc/namingconvention?fr
Moins de texte dans une signature c'est agrandir son espace.
loki#5 Posté le 14/8/2010 à 22:27:00
Je ne l'avais pas vus sur la doc ou pas prêté attention quand je suis allé sur cette page 8) je vais commencer a prendre l'habitude de dollariser mes variables globales ;)

merci encore pour toutes ses explications.
Dell Vostro 3750
Ubuntu 13.04 - Gambas 3.4.1
1