Page 1 sur 1

Décomposer une chaîne contenant des Tableaux

Publié : mer. 01/avr./2020 16:58
par Shadow
Salut, que pensez vous de ceci ?
Alors ça sert à décomposer une chaîne de caractères qui contient des Tableaux.
Chaque Tableau est numéroté et mis dans la Map:

Code : Tout sélectionner

; Créé par Dieppedalle David le 01/04/2020.
; Décompose une chaîne contenant des Tableaux.
; Chaque Tableau trouvé serra indexer dans la Map.

Global NewMap MapRegistreTableau.s()
Global NewList ListePositionAgrapheOuvrante.i()

Procedure.i DecomposeTableau(Tableau.s)
  
  If Not CountString(Tableau.s, "[") = CountString(Tableau.s, "]")
    ProcedureReturn 0
  EndIf
  
  For Index.i = 1 To Len(Tableau.s) + 1
    
    Caractere$ = Mid(Tableau.s, Index.i, 1)
    
    If Caractere$ = "["
      
      AddElement(ListePositionAgrapheOuvrante.i())
      ListePositionAgrapheOuvrante.i() = Index.i
      
    ElseIf Caractere$ = "]"
      
      If ListSize(ListePositionAgrapheOuvrante.i()) > 0
        DernierePositionAgrapheOuvrante.i = ListePositionAgrapheOuvrante.i()
        DeleteElement(ListePositionAgrapheOuvrante.i(), 1)
      Else
        ProcedureReturn 0
      EndIf
      
      NumeroTableau.i + 1
      MapRegistreTableau.s("Tab-" + Str(NumeroTableau.i)) = Mid(Tableau.s, DernierePositionAgrapheOuvrante.i, (Index.i + 1) - DernierePositionAgrapheOuvrante.i)
      
    EndIf
    
  Next
  
EndProcedure

Tableau.s = "[123, [234, 567, 789], Abc, [234, [345, [456, [654, [147, 852, 369], [678, [789, [987, Uvw, 852], Def, 147], Ghi], Rst, 258], Mlk], Jkl, [123, 456, 789], 567], Mno], Pqr, 369]"

DecomposeTableau(Tableau.s)

ForEach MapRegistreTableau.s()
  Debug MapKey(MapRegistreTableau.s()) + " = " + MapRegistreTableau.s()
Next

Re: Décomposer une chaîne contenant des Tableaux

Publié : mer. 01/avr./2020 17:07
par G-Rom
Question , si je veut avoir dans mon tableau des crochets : [ ou ] comment je fait ?

Re: Décomposer une chaîne contenant des Tableaux

Publié : mer. 01/avr./2020 18:22
par Shadow
Dans une chaîne de caractère alors...
Oui en plus de la chaîne elle même.

Donc genre ça ?: [123, "[456, "Abc", 789, 852]", 654, 357]
Je vais régler ce problème en ignorante les chaîne dans la chaîne, ça te va ?

Bha pas simple mais je vais bien trouvé, car imagine ne serais-ce que ce genre de chose:

Code : Tout sélectionner

[123, "[456, "Abc", 789, 852]", 654, 357, "[456, "Abc", 789, 852]", 156, 357]
Il faut que je trouve un moyen de régler ceci.

Re: Décomposer une chaîne contenant des Tableaux

Publié : mer. 01/avr./2020 19:19
par Naheulf
Shadow a écrit :Bha pas simple mais je vais bien trouvé, car imagine ne serais-ce que ce genre de chose:

Code : Tout sélectionner

[123, "[456, "Abc", 789, 852]", 654, 357, "[456, "Abc", 789, 852]", 156, 357]
Il faut que je trouve un moyen de régler ceci.
Si tu fais un programme qui accepte cette chaîne alors il y a un problème.
Si je mets des couleurs pour tout repérer ta chaine donne ça :
En couleurs tu a écrit :[123, "[456, "Abc", 789, 852]", 654, 357, "[456, "Abc", 789, 852]", 156, 357]
Édit : Sauf si tu considères que les Abc parti des chaines de caractères.

Re: Décomposer une chaîne contenant des Tableaux

Publié : mer. 01/avr./2020 19:25
par Shadow
Imagine avec ça alors lol:

Code:

Code : Tout sélectionner

Tableau.s = "[123, " + Chr(34) + "[456, " + Chr(34) + "[Abc, [751, " + Chr(34) + "Abc" + Chr(34) + ", 159, 485], 651, 769]" + Chr(34) + ", 789, 852]" + Chr(34) + ", 654, 357, " + Chr(34) + "[456, " + Chr(34) + "Abc" + Chr(34) + ", 789, 852]" + Chr(34) + ", 156, 357]"
Résultat:

Code : Tout sélectionner

[123, "[456, "[Abc, [751, "Abc", 159, 485], 651, 769]", 789, 852]", 654, 357, "[456, "Abc", 789, 852]", 156, 357]
Là j'avoue que je coince, une piste sur comment procéder ? (pas de code)

Re: Décomposer une chaîne contenant des Tableaux

Publié : mer. 01/avr./2020 19:44
par SPH
Heuuuuu,........... ca sert a quoi ?

Désolé, je ne vois ni l'interet, ni l'utilité... :| :idea:

Re: Décomposer une chaîne contenant des Tableaux

Publié : mer. 01/avr./2020 20:09
par Naheulf
Déjà il faut que tu définisse comment les données doivent être structurées. Par-ce que là je ne vois pas quel programme fournirais des données autant en bordel que ça.

Re: Décomposer une chaîne contenant des Tableaux

Publié : mer. 01/avr./2020 20:10
par Shadow
C'est bon j'ai trouvé, il faut renseigné un début et une fin de chaîne dans la chaîne.

Code : Tout sélectionner

; Créé par Dieppedalle David le 01/04/2020.
; Décompose une chaine contenant des Tableaux.
; Chaque Tableau trouvé serras indexé dans la Map.
; Mettez /" en début de chaîne et "/ en fin de chaîne pour igniorer une chaîne dans la chaîne, utile si la chaîne contient des Tableaux.
; Ex: [123, /"[234, 567, 789]/", Abc, /"[258, 147, Def]"/, 456, 369, Ghi], ici, les chaînes: "[234, 567, 789]" et "[258, 147, Def]" seront ignoré.

Global NewMap MapRegistreTableau.s()
Global NewList ListePositionAgrapheOuvrante.i()

Procedure.i DecomposeTableau(Tableau.s)
  
  If Not CountString(Tableau.s, "[") = CountString(Tableau.s, "]")
    ProcedureReturn 0
  EndIf
  
  For Index.i = 1 To Len(Tableau.s) + 1
    
    Caractere$ = Mid(Tableau.s, Index.i, 1)
    
    If Caractere$ = "["
      
      AddElement(ListePositionAgrapheOuvrante.i())
      ListePositionAgrapheOuvrante.i() = Index.i
      
    ElseIf Caractere$ = "]"
      
      If ListSize(ListePositionAgrapheOuvrante.i()) > 0
        DernierePositionAgrapheOuvrante.i = ListePositionAgrapheOuvrante.i()
        DeleteElement(ListePositionAgrapheOuvrante.i(), 1)
      Else
        ProcedureReturn 0
      EndIf
      
      NumeroTableau.i + 1
      MapRegistreTableau.s("Tab-" + Str(NumeroTableau.i)) = Mid(Tableau.s, DernierePositionAgrapheOuvrante.i, (Index.i + 1) - DernierePositionAgrapheOuvrante.i)
      
    ElseIf Caractere$ = "/"
      
      If Mid(Tableau.s, Index.i + 1, 1) = Chr(34)
        
        FinChaine.i = FindString(Tableau.s, Chr(34) + "/", Index.i + 1)
        
        If FinChaine.i > 0
          Index.i = FinChaine.i
        Else
          ProcedureReturn 0
        EndIf
        
      EndIf
      
    EndIf
    
  Next
  
  ProcedureReturn 1
  
EndProcedure

Tableau.s = "[123, [234, 567, 789], Abc, [234, [345, [456, [654, [147, 852, 369], [678, [789, [987, Uvw, 852], Def, 147], Ghi], Rst, 258], Mlk], Jkl, [123, 456, 789], 567], Mno], Pqr, 369]"
Tableau.s = "[123, /" + Chr(34) + "[456, " + Chr(34) + "[Abc, [751, " + Chr(34) + "Abc" + Chr(34) + ", 159, 485], 651, 769]" + Chr(34) + ", 789, 852]" + Chr(34) + "/, 654, 357, /" + Chr(34) + "[456, " + Chr(34) + "Abc" + Chr(34) + ", 789, 852]" + Chr(34) + "/, 156, 357]"

Debug DecomposeTableau(Tableau.s)

ForEach MapRegistreTableau.s()
  Debug MapKey(MapRegistreTableau.s()) + " = " + MapRegistreTableau.s()
Next
J'ai corrigé, y avais une coquille :)