Page 2 sur 2

Re: Comment convertir une chaîne de tableau en code...

Publié : dim. 05/avr./2020 21:00
par Ollivier
Mindphazer a écrit :Mais grands Dieux explique ce que tu veux faire exactement !?
C'est bien Mindphazer : tu te rapproches de la croyance de groupe. Encore quelques semaines de confinement, et tu seras monothéïste pur et dur !!!

Re: Comment convertir une chaîne de tableau en code...

Publié : dim. 05/avr./2020 21:01
par Shadow
Ar-S a écrit :
je cherche à convertir une chaîne de caractères qui contient des tableaux vers du code PB
Tu veux interpréter ceci ou cela, tu apprends à te servir des regex. Il y a plein d'exemples (et non je ne vais pas en proposer un de plus).
Mot clé :arrow: CreateRegularExpression
Avec les regex, tu vas scinder ta chaine de caractères donc récupérer les morceaux à interpréter.
Oui je sais que c'est puissant ça, mais je en sais pas les utiliser, jvé creuser merci :)

Re: Comment convertir une chaîne de tableau en code...

Publié : dim. 05/avr./2020 22:23
par Mindphazer
Ollivier a écrit :
Mindphazer a écrit :Mais grands Dieux explique ce que tu veux faire exactement !?
C'est bien Mindphazer : tu te rapproches de la croyance de groupe. Encore quelques semaines de confinement, et tu seras monothéïste pur et dur !!!
Oui pour le mois de juin, ça devrait le faire !

Re: Comment convertir une chaîne de tableau en code...

Publié : dim. 05/avr./2020 22:24
par Mindphazer
Ombré a écrit : Moi je cherche à convertir une chaîne de caractères qui contient des tableaux vers du code PB et inversement :)
Cette phrase a du sens... :?:

Re: Comment convertir une chaîne de tableau en code...

Publié : dim. 05/avr./2020 23:37
par Shadow
Arrêtez de lire en diagonal c'est chiant, tu à qu'a suivre le sujet !

Re: Comment convertir une chaîne de tableau en code...

Publié : lun. 06/avr./2020 7:23
par Micoute
On sent bien l'esprit gaulois dans ce poste, quand comprendrez-vous tous que vous êtes sur un forum d'antre-aide ???

Re: Comment convertir une chaîne de tableau en code...

Publié : lun. 06/avr./2020 8:47
par Ar-S
C'est sûr Micoute.. Mais tu remarqueras qu'il ni a que les posts de David qui sont sujet à controverses... Pour plusieurs raisons..
- 1 - Il n'est jamais clair dans ce qu'il demande..
- 2 - On lui propose quelque chose, il répond très souvent : "Non ça je sais" ou "non tu n'as pas compris ce que je voulais"... Ce qui est frustrant et ce qui est sans doute due à la raison 1..
- 3 - Il se lance toujours dans des trucs improbables qu'il ne finira pas car trop complexe (pour lui et pour beaucoup)
Donc cela créé des tentions.
Mindphazer a tenté de lui répondre plus haut, lis sa réponse....

@Shadow.. Exprime toi clairement mais simplement... Maintenant les tartines incompréhensibles je les vire.
@Autres.. Stop le sarcasme, ignorez le sujet si vous êtes saoulé.

Re: Comment convertir une chaîne de tableau en code...

Publié : lun. 06/avr./2020 10:07
par Micoute
Ce que je comprend surtout, c'est qu'on a toujours tendance à croire que tout le monde est comme nous, bien que l'homme le plus riche du monde de l'homme le plus pauvre du monde n'ont en commun que 24 heures par jour, mais ils ne l'utilisent pas de la même manière, donc à chacun son handicap et à chacun d'aider ceux qui sont moins nantis qu'eux. C'est bien pour cette raison que je n'oublie jamais de remercier celui ou ceux qui me sortent d'un mauvais pas.

Re: Comment convertir une chaîne de tableau en code...

Publié : lun. 06/avr./2020 13:30
par Demivec
Shadow a écrit :Salut,

Alors je ne demande pas de code, juste quelques info, jme débrouille pour le reste.
J'ai beaucoup de mal à me réprésenter un tableau sous forme de chaîne de caractères.
Comment ça s’interprète, comment ça se lit ?
Est ce que ce code de conversion est correcte ?:

Code : Tout sélectionner

"[123, [234, Def], Abc, [345, [456, Mno, 567], Jkl], Ghi]"

Dim Tableau.s(1, 2, 3)

Tableau.s(0, 0, 0) = "123"
Tableau.s(0, 1, 0) = "234"
Tableau.s(0, 1, 1) = "Def"
Tableau.s(0, 0, 1) = "Abc"
Tableau.s(0, 2, 0) = "345"
Tableau.s(1, 0, 0) = "456"
Tableau.s(1, 0, 1) = "Mno"
Tableau.s(1, 0, 2) = "567"
Tableau.s(0, 2, 1) = "Jkl"
Tableau.s(0, 0, 3) = "Ghi"

Juste pour s'amuser :

Code : Tout sélectionner

Structure subString
  ;if *sa = #Null then s.s contains the element, otherwise s.s is ignored and *sa points to another arraySubString as the element.
  ;si *sa = #Null alors s.s contient l'élément, sinon s.s est ignoré et *sa pointe vers un autre arraySubString comme élément.
  s.s
  *sa.arraySubString
EndStructure

Structure arraySubString
  Array e.subString(0)
EndStructure

Structure charArrayPtr
  c.c[0]
EndStructure

;Creates a SubString Array representation from a formatted string and returns the address of the new structure that was created.
;If formatted string is empty it returns zero, if there is not an equal number of left and right brackets it returns -1.
;If the address of a initial structure was passed in then that same address will be returned if the formatted string is not in error.
;Crée une représentation de type SubString Array à partir d'une chaîne formatée et renvoie l'adresse de la nouvelle structure qui a été créée.
;Si la chaîne formatée est vide, il renvoie zéro, s'il n'y a pas un nombre égal de crochets à gauche et à droite, il renvoie -1.
;Si l'adresse d'une structure initiale a été transmise, cette même adresse sera renvoyée si la chaîne formatée n'est pas erronée.
Procedure.i createSubStringArray(*t.arraySubString, i$)
  Protected ic, ic_end, x = Len(i$), *charPtr.charArrayPtr, index_el, max_el, depth
  
  ;Debug i$
  If *t = 0
    *t = AllocateStructure(arraySubString)
  EndIf
    
  If CountString(i$, "[") <> CountString(i$, "]")
    ;badly formed string, does not have same number of matching brackets ;chaîne mal formée, n'a pas le même nombre de parenthèses correspondantes
    ProcedureReturn -1 
  ElseIf x = 0 
    
    ProcedureReturn 0 ;empty string ;chaîne vide
  Else
    *charPtr = @i$
    If *charPtr\c[ic] <> '[' Or *charPtr\c[x - 1] <> ']'
      ProcedureReturn -1 ;badly formed string, needs left and right brackets ;chaîne mal formée, nécessite des crochets gauche et droit
    EndIf
    ic + 1
  EndIf
  
  ;count total elements ;compter les éléments totaux
  ic_end = ic
  While ic_end <> x
    Select *charPtr\c[ic_end]
      Case '['
        depth + 1
      Case ']'
        depth - 1
        If depth < 0
          ;malformed string, more closing brackets occur before opening brackets ;chaîne malformée, plus de crochets de fermeture se produisent avant les crochets d'ouverture
          x = ic_end ;reduce length of string ;réduire la longueur de la chaîne
          Break 
        EndIf
      Case ','
        If depth = 0
          max_el + 1
        EndIf
    EndSelect
    ic_end + 1
  Wend

  Dim *t\e(max_el)
  ;Debug max_el
  While ic <= x
    If *charPtr\c[ic] <> '[' ;simple string ;chaîne simple
      ic_end = ic + 1
      While *charPtr\c[ic_end] <> ',' And *charPtr\c[ic_end] <> ']' And ic_end < x
        ic_end + 1
      Wend
      ;Debug Str(index_el) + "'" + PeekS(*charPtr + ic * SizeOf(character), ic_end - ic) + "'"
      *t\e(index_el)\s = PeekS(*charPtr + ic * SizeOf(character), ic_end - ic)
      
    Else ;sub-array string ;chaîne de sous-Tableau
      ;count total elements ;compter les éléments totaux
      ic_end = ic + 1
      depth = 0
      While ic_end <> x
        Select *charPtr\c[ic_end]
          Case '['
            depth + 1
          Case ']'
            depth - 1
            If depth < 0 ;end of string ;fin de la chaîne
              Break 
            EndIf
          Case ','
            If depth = 0
            EndIf
        EndSelect
        ic_end + 1
      Wend
      ic_end + 1
      ;Debug Str(index_el) + " array "
      *t\e(index_el)\sa = createSubStringArray(0, PeekS(*charPtr + ic * SizeOf(character), ic_end - ic))
    EndIf
    
    If *charPtr\c[ic_end] = ','
      ic_end + 1
      While ic_end < x And *charPtr\c[ic_end] = ' '
        ic_end + 1
      Wend
      ic = ic_end
    ElseIf *charPtr\c[ic_end] = ']'
      Break ;exit the loop and return results ;sortir la boucle et renvoyer les résultats
    EndIf
      
    index_el + 1
  Wend
  
  ProcedureReturn *t
EndProcedure

;display formatted contents of SubStringArray ;afficher le contenu formaté de SubStringArray
Procedure.s outputSubStringArray(*t.arraySubString)
  Protected i, o$, x = ArraySize(*t\e())
  
  If x <> -1
    o$ = "["
    i = 0
    While i <= x
      If *t\e(i)\sa = 0
        o$ + *t\e(i)\s
      Else
        o$ + outputSubStringArray(*t\e(i)\sa)
      EndIf
      o$ + ", "
      i + 1
    Wend
    
    ProcedureReturn ReplaceString(o$, ", ", "]", #PB_String_NoCase, Len(o$) - 2)
  Else
    ProcedureReturn "[]" ;empty ;vide
  EndIf
EndProcedure

;Free contents of SubStringArray structure and sub-structures previous created with createSubStringArray()
;Set is_ByValue = False if freeing a variable (i.e. Tableau.arraySubString) instead of a pointer.
;Returns contents of SubStringArray.
;Contenu libre de la structure SubStringArray et des sous-structures précédemment créées avec createSubStringArray()
;Set is_ByValue = False si l'on libère une variable (par exemple Tableau.arraySubString) au lieu d'un pointeur.
;Renvoie le contenu du tableau SubStringArray.
Procedure.s freeSubStringArray(*t.arraySubString, is_ByValue = #True)
  Protected i, o$, x = ArraySize(*t\e())
  
  o$ = outputSubStringArray(*t)
  
  i = 0
  While i <= x
    If *t\e(i)\sa <> 0
      freeSubStringArray(*t\e(i)\sa)
      *t\e(i)\sa = 0
    EndIf
    i + 1
  Wend
  
  If is_ByValue
    FreeStructure(*t)
  Else
    ClearStructure(*t, arraySubString)
  EndIf
  
  ProcedureReturn o$
EndProcedure


CompilerIf #PB_Compiler_IsMainFile
  
  Define Tableau.arraySubString, Tableu2.arraySubString, result
  
  Define x$ = "[123, [234, Def], Abc, [345, [456, Mno, 567], Jkl], Ghi]"
  
  result = createSubStringArray(@Tableau, x$)
  Select result
    Case -1
      Debug "Formatted string contains unmatching brackets."
    Case 0
      Debug "Formatted string is empty."
    Default
      Debug "arraySubString structure created at address " + result + "."
  EndSelect
  
  
  Debug outputSubStringArray(@Tableau)
  
  freeSubStringArray(@Tableau, #False)
CompilerEndIf

Re: Comment convertir une chaîne de tableau en code...

Publié : mar. 07/avr./2020 14:34
par Shadow
@Demivec, merci :)