Allouer une zone mémoire en fonction de la taille de la chaîne$ à y mettre, ni plus ni moins. Evite la perte de mémoire inutile.
Il y a peut-être une optimisation à faire ou à infirmer le processus.
à tester. Vos commentaires ou rectifications sont bienvenues.
Code : Tout sélectionner
;WriteData() et Allocation de zone mémoire en fonction de la taille de la chaîne$
; Mode ASCII ou UTF-8
Chaine$ = "Enregistre ce texte dans le bloc mémoire"
LenghtOf = StringByteLength(Chaine$, #PB_Ascii)
Debug LenghtOf
*MemoryID = AllocateMemory(LenghtOf+1) ;Alloue un bloc mémoire de LenghtOf octets + 1 pour le caractère de fin de chaîne ascii ou utf8
If *MemoryID
PokeS(*MemoryID, Chaine$ ,#PB_Default, #PB_Ascii) ; Ecriture d'une chaîne de caractères dans le bloc mémoire
EndIf
If CreateFile(0, "Texte.txt"); Création d'un nouveau fichier...
WriteData(0, *MemoryID, SizeOf(Character)*LenghtOf); On écrit tous les caractères du bloc mémoire dans le fichier
CloseFile(0); Ferme le fichier précédemment ouvert et enregistre les données
Else
Debug "Impossible de créer le fichier!"
EndIf
FreeMemory(*MemoryID)
;*******************************************************
;Mode Unicode
Chaine$ = "Enregistre ce texte dans le bloc mémoire"
LenghtOf = StringByteLength(Chaine$, #PB_Unicode)
Debug LenghtOf
*MemoryID = AllocateMemory(LenghtOf+2) ;Alloue un bloc mémoire de LenghtOf octets + 2 pour le caractère de fin de chaîne unicode
If *MemoryID
PokeS(*MemoryID, Chaine$ ,#PB_Default, #PB_Unicode) ; Ecriture d'une chaîne de caractères dans le bloc mémoire
EndIf
If CreateFile(0, "Texte.txt"); Création d'un nouveau fichier...
WriteData(0, *MemoryID, SizeOf(Character)*LenghtOf); On écrit tous les caractères du bloc mémoire dans le fichier
CloseFile(0); Ferme le fichier précédemment ouvert et enregistre les données
Else
Debug "Impossible de créer le fichier!"
EndIf
FreeMemory(*MemoryID)
Code : Tout sélectionner
ch1$ = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; tester une chaîne
ch2$ = "0000000000000000000000000000000011111111111111111111111111111111"; ou une autre
;les résultats correspondent à la taille en octets qu'il faudra allouer à la mémoire via AllocateMemory()
;enfin il faudra ajouter +1 au résultat si #PB_UTF8 ou #PB_Ascii et +2 si #PB_Unicode
Resultat_utf8 = StringByteLength(ch1$+ch1$+ch1$+ch1$, #PB_UTF8)
Debug Resultat_utf8
Resultat_utf8_1 = StringByteLength(ch1$, #PB_UTF8)
Debug Resultat_utf8_1
Resultat_utf8_2 = StringByteLength(ch2$, #PB_UTF8)
Debug Resultat_utf8_2
Debug "------------------------------------------------"
Resultat_Ascii = StringByteLength(ch1$+ch1$+ch1$+ch1$, #PB_Ascii)
Debug Resultat_Ascii
Resultat_Ascii_1 = StringByteLength(ch1$, #PB_Ascii)
Debug Resultat_Ascii_1
Resultat_Ascii_2 = StringByteLength(ch2$, #PB_Ascii)
Debug Resultat_Ascii_2
Debug "------------------------------------------------"
Resultat_Unicode = StringByteLength(ch1$+ch1$+ch1$+ch1$, #PB_Unicode)
Debug Resultat_Unicode
Resultat_Unicode_1 = StringByteLength(ch1$, #PB_Unicode)
Debug Resultat_Unicode_1
Resultat_Unicode_2 = StringByteLength(ch2$, #PB_Unicode)
Debug Resultat_Unicode_2