Décomposer une chaîne contenant des Tableaux

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Décomposer une chaîne contenant des Tableaux

Message 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
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.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

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

Message par G-Rom »

Question , si je veut avoir dans mon tableau des crochets : [ ou ] comment je fait ?
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

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

Message 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.
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
Naheulf
Messages : 193
Inscription : dim. 10/mars/2013 22:22
Localisation : France

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

Message 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.
Dernière modification par Naheulf le mer. 01/avr./2020 20:04, modifié 1 fois.
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

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

Message 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)
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
SPH
Messages : 4973
Inscription : mer. 09/nov./2005 9:53

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

Message par SPH »

Heuuuuu,........... ca sert a quoi ?

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

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Naheulf
Messages : 193
Inscription : dim. 10/mars/2013 22:22
Localisation : France

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

Message 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.
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

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

Message 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 :)
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.
Répondre