Insa permet d'insérer des éléments 'vides' dans des tableaux mono-dimensionnés, à partir d'un indice donné.
Insa début [ , nombre [ , borne ] ] liste_nom_var
Elément | Description | Restrictions |
début | Expression numérique entière de l'indice dans les tableaux à partir duquel se fait l'insertion | Le début doit : |
nombre | Expression numérique entière du nombre d'éléments à insérer. | nombre > 0 |
borne | Expression numérique entière de l'indice dans les tableaux où se termine l'insertion. | La borne ne doit pas dépasser la plus petite des bornes supérieures des tableaux. |
liste_nom_var | Liste de nom_var séparées par le caractère ','. | Aucune. |
nom_var | nom_de_variable désignant le tableau dans lequel s'effectue l'insertion. Dans le cas d'un tableau déroulant, il s'agit de la variable de bas de tableau. | Aucune. |
# Lecture des N premiers enregistrements du fichier CLIENT et
# insertion des noms et clés (dans l'ordre des noms) dans 2 tableaux.
# La variable MAX désigne la position du dernier élément des tableaux
Local File CLIENT
Char NOM (20) (N), CLE (4) (N)
Local Shortint I, MAX : MAX = 0
# (Suite de l'exemple précédent)
Read [CLI]CODCLE First
While MAX < dim(NOM) & fstat = 0 :# fin de tableau ou de fichier
I = 0
While NOM(I) <> "" & [F]NOM > NOM(I) : I += 1 : Wend
If NOM(I) <> ""
Insa I, 1 NOM, CLE
Endif
NOM(I) = [F]NOM
CLE(I) = [F]CLE
MAX += 1
Read [CLI]CODCLE Next
Wend
# Insertion de lignes dans un tableau déroulant (dont la variable de
# bas de tableau a pour nom NLI) selon des paramètres variables
Insa [V]DEB, [V]NB, [V]FIN [M]NLI
# On dispose de 2 tableaux d'éléments (issus d'un jeu de libellés sur
# des noms de pilotes de terminaux). L'un (NOM) comporte les noms des
# fichiers, l'autre (CAR) les caractères "associés" :
0
1
2
3
4
5
...
CAR
A
A
H
I
V
V
...
NOM | ansi | at386 | hp | ibm3151 | vt200 | vt220 | ... |
# Supposons que l'on veuille y insérer 2 éléments en 3ème position
# (donc en rang 2) :
Insa 2, 2 CAR, NOM
# Le résultat de cette instruction sera :
0
1
2
3
4
5
6
7
...
CAR
A
A
H
I
V
V
...
NOM | ansi | at386 | hp | ibm3151 | vt200 | vt220 | ... |
# Supposons maintenant que la borne ait une valeur inférieure au
# nombre d'éléments des tableaux :
0
1
2
3
4
5
...
CAR
A
A
H
V
...
NOM | ansi | at386 | hp | vt220 | ... |
# on "perd" les éléments I, ibm3151 et V, vt200
# et l'on garde ceux au-delà de la borne : V, vt220
Insa permet d'insérer des éléments 'vides' (1 par défaut) dans un ensemble de tableaux monodimensionnés. Ces éléments valent zéro (valeur 0, date nulle ou chaîne vide) et sont non initialisés dans le cas d'un tableau déroulant. Dans la syntaxe de l'instruction, début détermine l'indice (commun à tous les tableaux) où commence l'insertion et nombre désigne le nombre d'éléments à insérer.
Dans chaque tableau, les éléments sont décalés depuis 'début', d'un nombre de positions égal à 'nombre'. Les 'nombre' derniers éléments du tableau sont mis à zéro (la 'borne' par défaut est la fin du tableau).
Donner une valeur à 'borne' qui soit inférieure à la plus petite des bornes inférieures des tableaux (une valeur supérieure n'aurait pas de sens), signifie que l'on s'intéresse à une restriction du tableau. Dans ce cas on perd les 'nombre' éléments placés juste avant 'borne', les éléments avant 'début' et après 'borne' étant inchangés. Le dessin qui suit simule l'insertion de 'nombre' positions dans un tableau d'éléments, D désignant le 'début' et B la 'borne' (notons que l'élément d'indice 'borne' est perdu) :
|
| D | Perdus B |
| |||||||||||||
Avant | I | I | ... | I | D | D | ... | D | D | P | P | ... | P | I | I | ... | I |
Après | I | I | ... | I |
|
| ... |
| D | D | ... | D |
| I | I | ... | I |
| Inchangés | Nombre | Décalés | Inchangés |
Dans le cas d'une insertion dans un tableau déroulant, le nom de la variable à indiquer est celui de la variable de bas de tableau ; elle désigne alors l'ensemble des variables du tableau déroulant.
insertion de lignes dans un tableau déroulant
début détermine la ligne où commence l'insertion. le numéro de ligne commence à 0.
nombre désigne le nombre de ligne à insérer.
Pour que la ligne complète du tableau soit insérée, on renseigne dans Liste_nom_var, la variable de bas de tableau.
Borne n'est pas à renseigner.
Attention, la variable de bas de tableau n'est pas mise à jour automatiquement par le moteur.