AddElementTableau()

Programmation d'applications complexes
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: AddElementTableau()

Message 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:
Dernière modification par Zorro le lun. 20/mars/2017 13:36, modifié 1 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: AddElementTableau()

Message 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
Dernière modification par Shadow le lun. 20/mars/2017 15:33, modifié 1 fois.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: AddElementTableau()

Message 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
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: AddElementTableau()

Message 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 )
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: AddElementTableau()

Message par Micoute »

Dobro, je te demande pardon si j'ai pu t'offenser, j'ai juste voulu l'adapter à mon cas
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 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: AddElementTableau()

Message 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:
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: AddElementTableau()

Message 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 :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Répondre