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é
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
