PS: Attention, le tableau contiendra toujours un élément à la fin de plus qui serra vide, pas le choix
Code : Tout sélectionner
; Créé par Monsieur Dieppedalle David le 20/03/2017.
Global ElementsAddArrayElement.s = ""
Macro AddArrayElementFormat(NomFormat, ExtensionFormat)
If ElementsAddArrayElement.s > ""
For I = 1 To CountString(ElementsAddArrayElement.s, ",") + 1
ElementArray.s = Trim(StringField(ElementsAddArrayElement.s, I, ","), Chr(32))
If ElementArray.s <> ""
ReDim Array#NomFormat.ExtensionFormat(ArraySize(Array#NomFormat.ExtensionFormat()) + 1)
Array#NomFormat.ExtensionFormat(ArraySize(Array#NomFormat.ExtensionFormat()) - 1) = Val(ElementArray.s)
EndIf
Next
EndIf
EndMacro
; Ajoute des éléments à la chaîne dans une Array Ascii.
Procedure AddArrayElementAscii(Array ArrayAscii.A(1), ElementsAddArrayElement.s)
AddArrayElementFormat(Ascii, A)
EndProcedure
; Ajoute des éléments à la chaîne dans une Array Byte.
Procedure AddArrayElementByte(Array ArrayByte.B(1), ElementsAddArrayElement.s)
AddArrayElementFormat(Byte, B)
EndProcedure
; Ajoute des éléments à la chaîne dans une Array Caractère.
Procedure AddArrayElementCaractere(Array ArrayCaractere.C(1), ElementsAddArrayElement.s)
AddArrayElementFormat(Caractere, C)
EndProcedure
; Ajoute des éléments à la chaîne dans une Array Double.
Procedure AddArrayElementDouble(Array ArrayDouble.D(1), ElementsAddArrayElement.s)
AddArrayElementFormat(Double, D)
EndProcedure
; Ajoute des éléments à la chaîne dans une Array Float.
Procedure AddArrayElementFloat(Array ArrayFloat.F(1), ElementsAddArrayElement.s)
AddArrayElementFormat(Float, F)
EndProcedure
; Ajoute des éléments à la chaîne dans une Array Integer.
Procedure AddArrayElementInteger(Array ArrayInteger.I(1), ElementsAddArrayElement.s)
AddArrayElementFormat(Integer, I)
EndProcedure
; Ajoute des éléments à la chaîne dans une Array Long.
Procedure AddArrayElementLong(Array ArrayLong.L(1), ElementsAddArrayElement.s)
AddArrayElementFormat(Long, L)
EndProcedure
; Ajoute des éléments à la chaîne dans une Array Quad.
Procedure AddArrayElementQuad(Array ArrayQuad.Q(1), ElementsAddArrayElement.s)
AddArrayElementFormat(Quad, Q)
EndProcedure
; Ajoute des éléments à la chaîne dans une Array Unicode.
Procedure AddArrayElementUnicode(Array ArrayUnicode.U(1), ElementsAddArrayElement.s)
AddArrayElementFormat(Unicode, U)
EndProcedure
; Ajoute des éléments à la chaîne dans une Array Word.
Procedure AddArrayElementWord(Array ArrayWord.W(1), ElementsAddArrayElement.s)
AddArrayElementFormat(Word, W)
EndProcedure
; Ajoute des éléments à la chaîne dans une Array String.
Procedure AddArrayElementString(Array ArrayString.s(1), ElementsAddArraylement.s)
Protected Caractere.s = ""
Protected DebutVirgule.i = 1
Protected DebutGuillemets.i = 0
Protected InterupteurGuillemets.b = #False
If ElementsAddArraylement.s > ""
For I = 1 To Len(ElementsAddArraylement.s)
Caractere.s = Mid(ElementsAddArraylement.s, I, 1)
If InterupteurGuillemets.b = #False
If Caractere.s = Chr(34)
InterupteurGuillemets.b = #True
DebutGuillemets.i = I
Else
If Caractere.s = ","
ElementCompartimentArray.s = Mid(ElementsAddArraylement.s, DebutVirgule.i, (I - DebutVirgule.i))
DebutVirgule.i = I + 1
If ElementCompartimentArray.s <> ""
ReDim ArrayString.s(ArraySize(ArrayString.s()) + 1)
ArrayString.s(ArraySize(ArrayString.s()) - 1) = ElementCompartimentArray.s
EndIf
Else
EndIf
EndIf
ElseIf InterupteurGuillemets.b = #True
If Caractere.s = Chr(34)
InterupteurGuillemets.b = #False
EndIf
EndIf
Next
ElementCompartimentArray.s = Mid(ElementsAddArraylement.s, DebutVirgule.i, (I - DebutVirgule.i))
If ElementCompartimentArray.s <> ""
ReDim ArrayString.s(ArraySize(ArrayString.s()) + 1)
ArrayString.s(ArraySize(ArrayString.s()) - 1) = ElementCompartimentArray.s
EndIf
EndIf
EndProcedure
; ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
; Exemple d'utilisation:
; ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Dim MonTableauAscii.a(0)
Dim MonTableauString.s(0)
A.a = 85
#B = 1975
; Si un élément est vide (Ex: deux virgule qui se touche), il ne serra pas comptabilisé.
; Les espaces ne sont pas comptabilisés avant et après un élément.
AddArrayElementAscii(MonTableauAscii(), "0, 1, A, B C, 2, 3, , 4, 5,, 6, , X2, 7, 8, , 9" + ", " + Str(A.a) + ", " + Str(#B))
For I = 0 To ArraySize(MonTableauAscii()) - 1
Debug MonTableauAscii(I)
Next
Debug "----------"
; Attention si vous mettez des guillemets dans un texte d'un élément du tableau, veuillez à se qu'ils
; soit toujours par paire, Sinon le résultat de la fonction ne serra pas celui attendu !
; Si un élément est vide (Ex: deux virgule qui se touche), il ne serra pas comptabilisé.
; Les virgules dans une chaîne ne serront pas compté comme le prouve l'exemple suivant:
AddArrayElementString(MonTableauString(), ~", ,,, 0, 1, A, B C, 2, 3, \" Ceci, est, \" un \", texte, \" comprenant \", des, virgule \" et des \"Guillemets\", , 4, 5,, 6, , X2, 7, 8, , 9" + ", " + Str(A.a) + ", " + Str(#B))
For I = 0 To ArraySize(MonTableauString()) - 1
Debug MonTableauString(I)
Next