UDF > Array >


_ArrayInsert

Ins�re une nouvelle valeur � la position sp�cifi�e d'un tableau 1D ou 2D

#include <Array.au3>
_ArrayInsert ( ByRef $aArray, $vRange [, $vValue = "" [, $iStart = 0 [, $sDelim_Item = "|" [, $sDelim_Row = @CRLF [, $iForce = $ARRAYFILL_FORCE_DEFAULT]]]]] )

Param�tres

$aArray Tableau � modifier
$vRange Position(s) � laquelle ins�rer l'�l�ment(s) - voir Remarques pour le format
$vValue [optionnel] Valeur(s) � ajouter - peut �tre une variable unique, une cha�ne avec s�parateurs (pass� dans $sDelim_Item) ou un tableau 1D
$iStart [optionnel] Colonne dans laquelle l'insertion doit commencer (tableau 2D uniquement)
$sDelim_Item [optionnel] S�parateur utilis� si une cha�ne doit �tre divis�e en �l�ments
$sDelim_Row [optionnel] S�parateur utilis� si une cha�ne doit �tre divis�e en lignes (2D uniquement)
$iForce [optionnel] Maintient le comportement par d�faut,
    ARRAYFILL_FORCE_DEFAULT (0)
Force l'addition de $vValue comme �l�ment unique,
    $ARRAYFILL_FORCE_SINGLEITEM (1)
Ou force le type de donn�es pour toute addition d'�l�ments
    $ARRAYFILL_FORCE_INT (2)
    $ARRAYFILL_FORCE_NUMBER (3)
    $ARRAYFILL_FORCE_PTR (4)
    $ARRAYFILL_FORCE_HWND (5)
    $ARRAYFILL_FORCE_STRING (6)
Voir Remarques pour plus de d�tails

Valeur de retour

Succ�s: Retourne la nouvelle taille du tableau.
�chec: Retourne 0 et d�finit @error <> 0.
@error: 1 - $aArray n'est pas un tableau
2 - $aArray n'est pas un tableau 1D ou 2D
3 - $vRange a un format incorrect (caract�re incorrect ou non ordonn�e)
4 - $vRange n'est pas un tableau 1D ou a seulement 1 �l�ment
5 - $vRange a des limites en dehors des limites du tableau
6 - $istart est en dehors des limites du tableau (2D uniquement)
7 - $vValeur n'est pas un tableau 2D (2D uniquement)
8 - $vValeur a trop de colonnes pour s'adapter � $aArray

Remarques

$vRange peut �tre une cha�ne contenant les lignes avant lesquelles une ligne doit �tre ins�r�e. Il peut �tre un nombre unique ou une plage d�sign�e par les premi�re et derni�re lignes s�par�es par un tiret (-) ou plusieurs �l�ments s�par�s par un point-virgule (;).

$vRange peut aussi �tre un tableau 1D contenant les lignes avant lesquelles une ligne doit �tre ins�r�e avec le nombre d'�l�ments dans l'�l�ment [0].
Dans les deux cas, les lignes doivent �tre en ordre croissant, mais peuvent �tre dupliqu�es.

Si $vValeur est une cha�ne avec s�parateurs tous les �l�ments sont ins�r�s dans le tableau sous forme de cha�nes. Cela peut �tre supplant� en utilisant le param�tre $iForce qui force les �l�ments dans le type de donn�es requis. Notez que tous les �l�ments de la cha�ne avec s�parateurs sont convertis - si les �l�ments sont de diff�rents types de donn�es, ils doivent �tre pass�s sous forme de tableau de sorte que leur type de donn�e sp�cifique est conserv�.


Le mode d'insertion d�pend du type $vValeur :

Le mode d'insertion d�pend du type de $vValeur, mais l'utilisation de $iForce peut modifier ceci. Le comportement par d�faut est le suivant:

Tableaux 1D:
    El�ment unique - ins�re l'�l�ment $vValue
    Cha�ne avec s�parateurs $sDelim_Item - ins�re autant de lignes que de sous-cha�nes
    Tableau 1D de base 0 - ins�ree autant de lignes qu'il y a d'�l�ments dans le tableau

Tableaux 2D:
    Element unique - ins�re une rang�e contenant $vValue dans la premi�re colonne
    Cha�ne avec s�parateurs $sDelim_Item - ins�re une ligne � la premi�re position, les colonnes sont remplies si il y a assez de sous-cha�nes
    Cha�ne avec s�parateurs $sDelim_Row - ins�re autant de lignes que de sous-cha�nes, une seule colonne est remplie
    Cha�ne avec double s�parateurs - ins�re autant de ligne que de sous-cha�nes de $sDelim_Row, autant de colonnes que de sous-cha�nes de $sDelim_Item
    Tableau 2D de base 0 - ins�re autant de lignes que de lignes du tableau, autant de colonnes que de colonnes du tableau

Une cha�ne vide ("") est ajout�e s'il n'y a pas suffisamment d'�l�ments sp�cifi�s dans $vValeur. Les �l�ments en exc�s sont ignor�s.

La d�finition du param�tre $iForce peut modifier le comportement par d�faut de l'insertion ou modifier le type de donn�es pour les �l�ments ajout�s. Il peut �tre d�fini comme suit:
$ARRAYFILL_FORCE_DEFAULT (par d�faut):
 - Les �l�ments sont �clat�s de la mani�re d�crite ci-dessus. Les �l�ments uniques et les �l�ments d'un tableau conservent leurs types de donn�es - les cha�nes avec s�parateurs sont ajout�es sous forme de cha�nes.

$ARRAYFILL_FORCE_SINGLEITEM:
 - Si $aArray est un tableau 1D, $vValeur est ajout�e comme �l�ment unique.
 - Si $aArray est un tableau 2D, le param�tre est ignor�.

$ARRAYFILL_FORCE_INT, $ARRAYFILL_FORCE_NUMBER, $ARRAYFILL_FORCE_PTR, $ARRAYFILL_FORCE_HWND, $ARRAYFILL_FORCE_STRING
 - Si $vValeur est un �l�ment unique, il est forc� dans le type de donn�es d�fini - par d�faut, il conserverait son type de donn�es existante.
 - Si $vValeur est une cha�ne avec s�parateurs, tous les �l�ments sont forc�s dans le type de donn�es sp�cifi� - par d�faut, ils seraient ajout�s au tableau sous forme de cha�nes. Si diff�rents types de donn�es sont n�cessaires pour les �l�ments, ils doivent �tre pass�s comme un tableau.
 - Si $vValeur est un tableau, le param�tre est ignor� et les �l�ments du tableau sont ajout�s en conservant leurs types de donn�es existants.

Si $iForce est d�fini sur toute autre valeur, il est ignor�.

La fonction ne met PAS � jour l'�l�ment compteur du tableau, mais la valeur retourn�e par la fonction (si elle r�ussit) donne le nouvel index le plus grand du tableau.

En relation

_ArrayAdd, _ArrayDelete, _ArrayPop, _ArrayPush

Exemples

Exemple 1

#include <Array.au3>

Local $aArray_Base[10] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
_ArrayDisplay($aArray_Base, "1D - Tableau d'origine")

; Ins�re un �l�ment unique
Local $aArray = $aArray_Base
_ArrayInsert($aArray, 2, "Ins�re avant 2")
_ArrayDisplay($aArray, "1D - El�ment unique")

; Ins�re une cha�ne avec s�parateurs en utilisant une plage du tableau
$aArray = $aArray_Base
Local $aRange[4] = [3, 3, 5, 9]
Local $sFill = "Ins�re avant 3|Ins�re avant 5|Ins�re avant 9"
_ArrayInsert($aArray, $aRange, $sFill)
_ArrayDisplay($aArray, "1D - Cha�ne de position")

; Ins�re un tableau 1D en utilisant une plage de cha�ne
$aArray = $aArray_Base
Local $aFill[4] = ["Ins�re avant 2", "Ins�re avant 6.1", "Ins�re avant 6.2", "Ins�re avant 7"]
_ArrayInsert($aArray, "2;6;6;7", $aFill)
_ArrayDisplay($aArray, "1D - Tableau 1D")


Exemple 2

#include <Array.au3>

Local $aArray_Base[10][3]
For $i = 0 To 9
    For $j = 0 To 2
        $aArray_Base[$i][$j] = String($i) & " - " & String($j)
    Next
Next
_ArrayDisplay($aArray_Base, "2D - Tableau d'origine")

; Ins�re un �l�ment unique
Local $aArray = $aArray_Base
_ArrayInsert($aArray, 7, "Ins�re avant 7-0")
_ArrayDisplay($aArray, "2D - El�ment unique")

; Ins�re un seul �l�ment dans une colonne d�finie
$aArray = $aArray_Base
_ArrayInsert($aArray, 3, "Ins�re avant 3-1", 1)
_ArrayDisplay($aArray, "2D - Colonne d�finie")

; Ins�re un �l�ment d'une cha�ne avec s�parateurs - ins�r� comme une ligne - les autres  lignes sont remplies avec ""
$aArray = $aArray_Base
Local $sFill = "Avant 3-0|Avant 3-1|Avant 3-2"
_ArrayInsert($aArray, "3;5;9", $SFILL)
_ArrayDisplay($aArray, "2D - Cha�ne avec s�parateurs")

; Ins�re une ligne d'une cha�ne avec s�parateurs en utilisant une plage du tableau - ins�r� comme 3 lignes, les autres colonnes sont remplis avec ""
$aArray = $aArray_Base
Local $aRange[4] = [3, 3, 5, 9]
$sFill = "Avant 3-2" & @CRLF & "Avant 5-2" & @CRLF & "Avant 9-2"
_ArrayInsert($aArray, $aRange, $sFill, 2) ; Ins�re dans la colonne 2
_ArrayDisplay($aArray, "2D - Cha�ne avec s�parateurs")

; Ins�re un �l�ment comme ligne d'une cha�ne avec s�parateurs - ins�r� comme 4 lignes
$aArray = $aArray_Base
$sFill = "Avant 3-0|3-1|3-2" & @CRLF & "Avant 5a|5-1a|5-2a" & @CRLF & "Avant 5b|5-1b|5-2b" & @CRLF & "Avant 9|9-1|9-2"
_ArrayInsert($aArray, "3;5;5;9", $SFILL)
_ArrayDisplay($aArray, "2D - Cha�ne avec s�parateurs �l�ment & ligne")

; Ins�re un tableau 2D
$aArray = $aArray_Base
Local $aFill_1D[3][3] = [["Avant 2", "2-1", "2-2"],["Avant 3", "3-1", "3-2"],["Avant 4", "4-1", "4-2"]]
_ArrayInsert($aArray, "2-4", $aFill_1D)
_ArrayDisplay($aArray, "2D - Tableau 2D")


Exemple 3

#include <Array.au3>
#include <MsgBoxConstants.au3>

Local $aArray_Base[2][2] = [["Org Item 0 - 0", "Org Item 0 - 1"],["Org Item 1 - 0", "Org Item 1 - 1"]]
Local $aArray
Local $sFill = 1 & @CRLF & 2 ; Notez que l'ajout est fait en tant que type de donn�es nombre ici
MsgBox($MB_SYSTEMMODAL, "Delimited string to add", $sFill)

; Ajoute des sous-cha�nes d'une cha�ne avec s�parateurs
$aArray = $aArray_Base
_ArrayInsert($aArray, "0;1", $sFill)
_ArrayDisplay($aArray, "Converti en cha�ne")
; Mais convertit en type de donn�es cha�ne ici
MsgBox($MB_SYSTEMMODAL, "Result", "Data:" & @TAB & $aArray[2][0] & @CRLF & "Datatype:" & @TAB & VarGetType($aArray[2][0]))

; Ajoute des sous-cha�nes d'une cha�ne avec s�parateurs
$aArray = $aArray_Base
; Maintenant force la conservation du type de donn�es
Local $hDataType = Number
_ArrayInsert($aArray, "0;1", $SFILL, Default, Default, Default, $hDataType)
_ArrayDisplay($aArray, "For�� � nombre")
; Et le type de donn�es est conserv�e
MsgBox($MB_SYSTEMMODAL, "Resultat", "Donn�e:" & @TAB & $aArray[2][0] & @CRLF & "Datatype:" & @TAB & VarGetType($aArray[2][0]))