Redimensionnement d'un tableau dynamiquement

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Redimensionnement d'un tableau dynamiquement

Message 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 !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Redimensionnement d'un tableau dynamiquement

Message 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:
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Redimensionnement d'un tableau dynamiquement

Message 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 !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Redimensionnement d'un tableau dynamiquement

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Redimensionnement d'un tableau dynamiquement

Message 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.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Redimensionnement d'un tableau dynamiquement

Message par Micoute »

Bonjour Fig et merci pour cette information.

Mais finalement, Est-ce qu'on peut redimensionner un tel tableau ?
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Redimensionnement d'un tableau dynamiquement

Message 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}
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Redimensionnement d'un tableau dynamiquement

Message 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.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Redimensionnement d'un tableau dynamiquement

Message 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:
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Redimensionnement d'un tableau dynamiquement

Message 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 !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Redimensionnement d'un tableau dynamiquement

Message 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.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Redimensionnement d'un tableau dynamiquement

Message par Micoute »

Merci microdevweb pour ce conseil et j'ai opté pour la liste chaînée.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre