Redimensionnement d'un tableau dynamiquement
Redimensionnement d'un tableau dynamiquement
Bonjour à tous, je voudrais savoir si on peut redimensionner un tableau tel que LigneCode.s[1]
Merci d'avance pour vos réponses !
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 !
Un homme doit être poli, mais il doit aussi être libre !
Re: Redimensionnement d'un tableau dynamiquement
Tu peux soit invoquer à nouveau Dim, soit utiliser ReDimMicoute a écrit :Bonjour à tous, je voudrais savoir si on peut redimensionner un tableau tel que LigneCode.s[1]
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)

Re: Redimensionnement d'un tableau dynamiquement
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 !
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 !
Un homme doit être poli, mais il doit aussi être libre !
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Redimensionnement d'un tableau dynamiquement
Bonjour micouteMarc56 a écrit :Il me semblait bien que les crochets [] indiquaient la longueur fixe de la chaîne

Pour une longueur fixe il faut utiliser les {}
Code : Tout sélectionner
LigneCode.s{3} = "abcde"
Debug LigneCode ;retournera uniquement abc
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Redimensionnement d'un tableau dynamiquement
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.
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
Version de PB : 6.00LTS - 64 bits
Re: Redimensionnement d'un tableau dynamiquement
Bonjour Fig et merci pour cette information.
Mais finalement, Est-ce qu'on peut redimensionner un tel tableau ?
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 !
Un homme doit être poli, mais il doit aussi être libre !
Re: Redimensionnement d'un tableau dynamiquement
En dehors d'une structure, l'utilisation de [] à la place de () provoque une erreur et la compilation s'arrête.
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
En VBA cela se fait par une déclaration: Option Base {0 | 1}
Code : Tout sélectionner
Dim a.s[10]
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

En VBA cela se fait par une déclaration: Option Base {0 | 1}
Re: Redimensionnement d'un tableau dynamiquement
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.
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 !
Un homme doit être poli, mais il doit aussi être libre !
Re: Redimensionnement d'un tableau dynamiquement
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.
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
comme quoi, ça sert de se replonger de temps à autres dans la doc. Merci Micoute

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
- 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



Re: Redimensionnement d'un tableau dynamiquement
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 !
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 !
Un homme doit être poli, mais il doit aussi être libre !
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Redimensionnement d'un tableau dynamiquement
@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.
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
Work at Centre Spatial de Liège
Re: Redimensionnement d'un tableau dynamiquement
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 !
Un homme doit être poli, mais il doit aussi être libre !