Page 1 sur 1

Redimensionnement d'un tableau dynamiquement

Publié : ven. 15/mai/2015 7:49
par Micoute
Bonjour à tous, je voudrais savoir si on peut redimensionner un tableau tel que LigneCode.s[1]

Merci d'avance pour vos réponses !

Re: Redimensionnement d'un tableau dynamiquement

Publié : ven. 15/mai/2015 8:19
par Marc56
Micoute a écrit :Bonjour à tous, je voudrais savoir si on peut redimensionner un tableau tel que LigneCode.s[1]
Tu peux soit invoquer à nouveau Dim, soit utiliser ReDim

La différence est que Dim va vider le tableau contrairement à ReDim

PS. En PB, les tableau utilisent les () et pas les []

Code : Tout sélectionner

Dim LigneCode.s(1)

LigneCode(1) = "hello"

ReDim LigneCode.s(2) 

LigneCode(2) = "world"

Debug "1: " + LigneCode(1)
Debug "2: " + LigneCode(2)
:wink:

Re: Redimensionnement d'un tableau dynamiquement

Publié : ven. 15/mai/2015 8:32
par Micoute
Bonjour Marc56 et merci pour ta réponse prompte.

Il me semblait bien que les crochets [] indiquaient la longueur fixe de la chaîne LigneCode.s !

Re: Redimensionnement d'un tableau dynamiquement

Publié : ven. 15/mai/2015 8:37
par falsam
Marc56 a écrit :Il me semblait bien que les crochets [] indiquaient la longueur fixe de la chaîne
Bonjour micoute :)
Pour une longueur fixe il faut utiliser les {}

Code : Tout sélectionner

LigneCode.s{3} = "abcde"
Debug LigneCode ;retournera uniquement abc
Mais je ne pense pas qu'il soit possible de faire un redimensionnement dynamique pour ce type de variable.

Re: Redimensionnement d'un tableau dynamiquement

Publié : lun. 18/mai/2015 6:13
par Fig
Les [] peuvent être utilisés mais le nombre d'élément créé est différent de ()
dim A.s(10) element de 0 à 10
dim A.s[10] element de 0 à 9

Les [] sont obligatoire si le tableau fait partie d'une structure.

Re: Redimensionnement d'un tableau dynamiquement

Publié : lun. 18/mai/2015 6:39
par Micoute
Bonjour Fig et merci pour cette information.

Mais finalement, Est-ce qu'on peut redimensionner un tel tableau ?

Re: Redimensionnement d'un tableau dynamiquement

Publié : lun. 18/mai/2015 13:28
par Marc56
En dehors d'une structure, l'utilisation de [] à la place de () provoque une erreur et la compilation s'arrête.

Code : Tout sélectionner

Dim a.s[10]
Ligne 1: La syntaxe de 'Dim' est : Dim NomDuTableau(NbElements).

Bon, jai testé sur PB 5.31 et 5.24 LTS. C'était peut-être possible avant?
:?

J'ai aussi tendance à préférer les [], pour la syntaxe qui se rapproche plus des autres langages.

De même j'aimerais bien avoir l'option des certains autres langages qui permet de choisir si un tableau commence à l'indice 0 ou 1 :wink:

En VBA cela se fait par une déclaration: Option Base {0 | 1}

Re: Redimensionnement d'un tableau dynamiquement

Publié : lun. 18/mai/2015 14:36
par Micoute
Merci Marc56 pour ta réponse.

En fait je voulais programmer un lecteur de script pour faire un programme à partir de ce script

donc j'ai une structure dans laquelle j'ai LigneCode.s[1], mais en fait il n'y a pas qu'une seule ligne de code dans un script et j'aurais voulu adapter la dimension au nombre de lignes de codes dans le dit script !

ça ne paraît pas compliqué et pourtant si ! Enfin pour moi en tout cas ! Je vais peut-être opter pour une liste chaînée.

Re: Redimensionnement d'un tableau dynamiquement

Publié : lun. 18/mai/2015 15:22
par Marc56
Tu peux appeler ReDim autant de fois que tu veux.
La méthode ci-dessous fonctionne, bien que pas idéale. En effet, il serait préférable de compter les lignes du script puis de définir la taille du tableau.

Code : Tout sélectionner

Dim LigneCode.s(1)

For i = 1 To 10
	ReDim LigneCode(i)
	LigneCode(i) = "Ligne " + Str(i)
Next

; Le tableau a été redimensionné 10 fois

For i = 1 To 10
	Debug LigneCode(i)
Next

; Le contenu est resté identique
Chacune des 3 méthode de stockage de variable en tableau (Dim, LinkedList et Map) à ses avantages et ses inconvénients. Ex:
- Accéder à un élément par un numéro: Dim
- Empiler, traiter un par un sans s'occuper du numéro (commande ForEach), trier: LinkedList
- Accéder par un nom: Map

Et c'est en écrivant ça que je me rend compte que sur mon projet en cours, j'aurais mieux fait d'utiliser une map plutôt qu'une LinkedList :roll: comme quoi, ça sert de se replonger de temps à autres dans la doc. Merci Micoute :mrgreen:

:wink:

Re: Redimensionnement d'un tableau dynamiquement

Publié : mar. 19/mai/2015 7:44
par Micoute
Bonjour Marc56 et merci pour ta réponse.

dans mon code il ne s'agit pas de LigneCode.s(1), mais LigneCode.s[1], sinon se serait trop simple !

Re: Redimensionnement d'un tableau dynamiquement

Publié : mar. 19/mai/2015 10:19
par microdevweb
@micoute,

N'aurais tu pas plus simple d'utilisé une liste ou une map, pas besoins de redimensionnement. Un simple Adelement ou AdmapElement. Je ne connais évidement pas ton projet, mais si tu travaille avec des lignes (d'après ce que je comprend) une map ne serais peut être pas mal, tu retrouve directement la map avec FindMap et la clé renseignée.

Re: Redimensionnement d'un tableau dynamiquement

Publié : mar. 19/mai/2015 15:56
par Micoute
Merci microdevweb pour ce conseil et j'ai opté pour la liste chaînée.