Page 3 sur 3

Re: AddElementTableau()

Publié : lun. 20/mars/2017 9:08
par Zorro
Micoute a écrit :Depuis, j'ai trouvé d'autres solutions pour remplir un tableau sans se soucier de sa dimension,
tres largement inspiré de ma methode proposé recemment pour les listes ;)
ici : http://www.purebasic.fr/french/viewtopi ... 9&start=16

en musique, une telle ressemblance, on appel ça du plagia :lol:

Re: AddElementTableau()

Publié : lun. 20/mars/2017 12:44
par Shadow
Que pensez-vous de ceci pour les Listes ?:

Code : Tout sélectionner

; Créé par Monsieur Dieppedalle David le 20/03/2017.

Global ElementsAddListElement.s = ""

Macro AddListElementFormat(NomFormat, ExtensionFormat)
    
  If ElementsAddListElement.s > ""
    
    For I = 1 To CountString(ElementsAddListElement.s, ",") + 1
      
      ElementListe.s = Trim(StringField(ElementsAddListElement.s, I, ","), Chr(32))
      
      If ElementListe.s <> ""
        AddElement(Liste#NomFormat.ExtensionFormat())
        Liste#NomFormat.ExtensionFormat() = Val(ElementListe.s)
      EndIf
      
    Next
    
  EndIf
  
EndMacro

; Ajoute des éléments à la chaîne dans une liste Ascii
Procedure AddListElementAscii(List ListeAscii.A(), ElementsAddListElement.s)
AddListElementFormat(Ascii, A)
EndProcedure

; Ajoute des éléments à la chaîne dans une liste Byte
Procedure AddListElementByte(List ListeByte.B(), ElementsAddListElement.s)
AddListElementFormat(Byte, B)
EndProcedure

; Ajoute des éléments à la chaîne dans une liste Caractère
Procedure AddListElementCaractere(List ListeCaractere.C(), ElementsAddListElement.s)
AddListElementFormat(Caractere, C)
EndProcedure

; Ajoute des éléments à la chaîne dans une liste Double
Procedure AddListElementDouble(List ListeDouble.D(), ElementsAddListElement.s)
AddListElementFormat(Double, D)
EndProcedure

; Ajoute des éléments à la chaîne dans une liste Float
Procedure AddListElementFloat(List ListeFloat.F(), ElementsAddListElement.s)
AddListElementFormat(Float, F)
EndProcedure

; Ajoute des éléments à la chaîne dans une liste Integer
Procedure AddListElementInteger(List ListeInteger.I(), ElementsAddListElement.s)
AddListElementFormat(Integer, I)
EndProcedure

; Ajoute des éléments à la chaîne dans une liste Long
Procedure AddListElementLong(List ListeLong.L(), ElementsAddListElement.s)
AddListElementFormat(Long, L)
EndProcedure

; Ajoute des éléments à la chaîne dans une liste Quad
Procedure AddListElementQuad(List ListeQuad.Q(), ElementsAddListElement.s)
AddListElementFormat(Quad, Q)
EndProcedure

; Ajoute des éléments à la chaîne dans une liste Unicode
Procedure AddListElementUnicode(List ListeUnicode.U(), ElementsAddListElement.s)
AddListElementFormat(Unicode, U)
EndProcedure

; Ajoute des éléments à la chaîne dans une liste Word
Procedure AddListElementWord(List ListeWord.W(), ElementsAddListElement.s)
AddListElementFormat(Word, W)
EndProcedure

; Ajoute des éléments à la chaîne dans une liste String
Procedure AddListElementString(List ListeString.s(), ElementsAddListElement.s)
  
  Protected Caractere.s = ""
  Protected DebutVirgule.i = 1
  Protected DebutGuillemets.i = 0
  Protected InterupteurGuillemets.b = #False
  
  If ElementsAddListElement.s > ""
    
    For I = 1 To Len(ElementsAddListElement.s)
      
      Caractere.s = Mid(ElementsAddListElement.s, I, 1)
      
      If InterupteurGuillemets.b = #False
        
        If Caractere.s = Chr(34)
          InterupteurGuillemets.b = #True
          DebutGuillemets.i = I
          
        Else
          
          If Caractere.s = ","
            
            ElementCompartimentListe.s = Mid(ElementsAddListElement.s, DebutVirgule.i, (I - DebutVirgule.i))
            DebutVirgule.i = I + 1
            
            If ElementCompartimentListe.s <> ""
              AddElement(ListeString.s())
              ListeString.s() = ElementCompartimentListe.s
              
            EndIf
            
          Else
            
          EndIf
          
        EndIf
        
      ElseIf InterupteurGuillemets.b = #True
        
        If Caractere.s = Chr(34)
          InterupteurGuillemets.b = #False
          
        EndIf
        
      EndIf
      
    Next
    
    ElementCompartimentListe.s = Mid(ElementsAddListElement.s, DebutVirgule.i, (I - DebutVirgule.i))
    
    If ElementCompartimentListe.s <> ""
      AddElement(ListeString.s())
      ListeString.s() = ElementCompartimentListe.s
      
    EndIf
    
  EndIf
  
EndProcedure

NewList MaListeAscii.a()
NewList MaListeString.s()

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.
AddListElementAscii(MaListeAscii(), "0, 1, A, B C, 2, 3, , 4, 5,, 6, , X2, 7, 8, , 9" + ", " + Str(A.a) + ", " + Str(#B))

ForEach MaListeAscii()
  Debug MaListeAscii()
Next

Debug "----------"

; Attention si vous mettez des guillemets dans un texte d'un élément de la liste, 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:
AddListElementString(MaListeString(), ~", ,,, 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))

ForEach MaListeString()
  Debug MaListeString()
Next

Re: AddElementTableau()

Publié : lun. 20/mars/2017 15:09
par Shadow
Et ceci pour les Tableaux:

PS: Attention, le tableau contiendra toujours un élément à la fin de plus qui serra vide, pas le choix
et c'est pourquoi l'on ferra pour énumérer celui-ci comme ceci:

Code : Tout sélectionner

For I = 0 To ArraySize(MonTableau()) - 1
Next

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

Re: AddElementTableau()

Publié : lun. 20/mars/2017 17:04
par falsam
PS: Attention, le tableau contiendra toujours un élément à la fin de plus qui serra vide, pas le choix
Pas le choix ? :roll: 8O :twisted:
; 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 !
8O

Qu'est ce que je dois en penser ? Rien. C'est tout simplement du rien. PureBasic est si simple et facile à lire que tu ne peux pas t’empêcher de le compliquer. Sans compter les contraintes de ton code.

Bien sur je pouvais te zapper. Mais je suis atterré de l'image que ça donne du forum.

Bien sur je pourrais t'aider au lieu de critiquer et ça m'arrive parfois par exemple pour ton compilateur en ligne de commande dernièrement , mais l'expérience prouve que tu en as en générale que faire.

Le désespoir est toujours une soumission. ( Romain Gary )

Re: AddElementTableau()

Publié : lun. 20/mars/2017 17:08
par Micoute
Dobro, je te demande pardon si j'ai pu t'offenser, j'ai juste voulu l'adapter à mon cas

Re: AddElementTableau()

Publié : lun. 20/mars/2017 17:12
par falsam
Micoute a écrit :Dobro, je te demande pardon si j'ai pu t'offenser, j'ai juste voulu l'adapter à mon cas
Non mais il est fou ce garçon :p

Il y a parfois pas milles façons de faire quelques choses en PureBasic. C'est pas pour ça que c'est du plagiat !

Je marche comme toi. Est ce que c'est du plagiat ? NON :mrgreen:

Re: AddElementTableau()

Publié : lun. 20/mars/2017 18:14
par Zorro
Micoute a écrit :Dobro, je te demande pardon si j'ai pu t'offenser, j'ai juste voulu l'adapter à mon cas
@Micoute tu as vu le smiley je pense .... ;) donc t'inquietes pas :)