Salut
Dobro, ton code marche niquel si ce n'est que ça s'arrète a 255
ou alors c'est que je n'est rien compris
Sinon, j'ai générer une table de 65534 caractères Unicode grâce a ce code:
Code : Tout sélectionner
OpenFile(1, "Base de donnée de caractères unicode.txt")
WriteStringFormat(1, #PB_Unicode)
For a = 0 To 65536
WriteUnicodeCharacter(1, a)
Next
CloseFile(1)
Mais je ne comprends pas pourquoi il manque 2 ou 3 caractères
le caractère chr(0) est réserver pour la fin d'une chaine, a ok
pour le deuxième, serais-ce pour le début d'une chaine ?
et pour le dernier je ne sais pas !
J'ai crée cette petite fonction pour ne gargder qu'un seule exemplaire
des caractères au cas ou il en aurais en double:
Code : Tout sélectionner
If ReadFile(0, "Base de donnée de caractères unicode.txt")
While Eof(0) = 0
(Eof = 'End Of File')
a$ + ReadString(0, #PB_Unicode)
Wend
CloseFile(0)
Else
MessageRequester("Information","Impossible d'ouvrir le fichier!")
EndIf
Repeat
Pos + 1
Caractere$ = Mid(a$, Pos, 1)
If Not FindString(b$, Caractere$, 1)
b$ + Caractere$
EndIf
Until Caractere$ = ""
SetClipboardText(b$)
J'ai ensuite essayez de crée une fonction pour renvoyer
des caractères Unicode suivent le nombre:
Code : Tout sélectionner
Global NewList Retenu.q()
Global BaseDeDonneeDeCaracteresUnicode$
If ReadFile(0, "Base de donnée de caractères unicode.txt") ; Si le fichier peut être lu , on continue...
While Eof(0) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
BaseDeDonneeDeCaracteresUnicode$ + ReadString(0, #PB_Unicode) ; Affiche ligne par ligne le contenu du fichier
Wend
CloseFile(0) ; Ferme le fichier précédemment ouvert
Else
MessageRequester("Information","Impossible d'ouvrir le fichier!")
EndIf
Procedure.s NombreUnicoDecimale(Nombre.q)
If Nombre > 0 And Nombre < 65533
Retenu$ = Mid(BaseDeDonneeDeCaracteresUnicode$, Nombre, 1)
ElseIf Nombre = 0
Retenu$ = "0"
ProcedureReturn Retenu$
EndIf
Reste.q = Nombre % 65532
Nombre = Nombre / 65532
Debug Reste
Debug Nombre
AddElement(Retenu())
Retenu() = Reste
If Nombre > 65532
NombreUnicoDecimale(Nombre)
Else
AddElement(Retenu())
Retenu() = Nombre
EndIf
ForEach Retenu()
If Retenu() > 0
Retenu$ = Mid(BaseDeDonneeDeCaracteresUnicode$, Retenu(), 1)
Else
Retenu$ = "0"
EndIf
Sortie$ = Sortie$ + Retenu$
Next
;ClearList(Retenu()) ; ici si on enlève le commantaire, rien ne va plus, pourquoi ?
ProcedureReturn ReverseString(Sortie$)
EndProcedure
MessageRequester("", " {" + Chr(34) + NombreUnicoDecimale(45550) + Chr(34) + "}", 64)
Mais j'y arrive pas, le but ici serais de faire la même chose que la commande
Hex mais avec des caractères Unicode car il en as beaucoup plus !
Ensuite, j'ai pas réussie a mètre tous ces caractères en DataSection
car pure basic ne reconnais pas les caractères Unicode
Comment puis-je procéder pour mètre cette table
directement dans le programme et l'inclure dans l'exe ?
Je ne veut pas simplement l'inclure dans l'exe mais aussi m'en servir sans pour autant extraire le fichier, c'est pour sa que j'ai essayer avec les DataSection !
Autres question
Comment je peut faire pour que pure basic accepte de très grand nombre
pourquoi c'est limité a maximum -9223372036854775808 à +9223372036854775807
Par exemple en basic « liberty basic »
et bien lui il peut calculer de gigantesque nombre, pourquoi pas bure basic ?
En basic si je fait par exemple:
Print 9999999999999999999999999999999999999999999999999999999999999999
+ 9999999999999999999999999999999999999999999999999999999999999999
il me sort bien:
19999999999999999999999999999999999999999999999999999999999999998
Sa encore ce n'est rien car il peut calculer des nombres gigantesque !
Y a t-il une fonction que l'on peut crée pour que pure basic face de même ?