Page 1 sur 1

ReadString()

Publié : lun. 24/avr./2006 14:24
par Xain
bonjour à tous.

je me permet de solliciter votre aide car j'ai un problème avec l'utilisation de la commande readstring().
je developpe un programme qui doit tronquer une chaine de caractère en plusieurs lignes (en fait, conversion de données entre un serveur AS400 et notre ERP maison)

exemple: un fichier source.txt qui contient la ligne "aaaabbbbccccdddd"
sera copiée dans un fichier destination.txt qui contiendra

aaaa
bbbb
cccc
dddd

le fichier source, destination et la taille de la coupure sont passée en parametre du programme.

si tout se passe bien pour un fichier de petite taille, readstring() ne semble pas apprecier un fichier qui contient une unique ligne de 585 728 octets (minimum). j'obtiens un 'invalid memory access'.

OpenConsole()
source.s=ProgramParameter()
dest.s=ProgramParameter()
taille.l=Val(ProgramParameter())
test=ReadFile(1,source.s)
contenu.s=readstring()

y a-t-il un moyen de contourner cette limitation ?

merci d'avance pour votre aide.

Publié : lun. 24/avr./2006 14:57
par Flype
bonjour,

avec quel version de purebasic as tu essayé ?

Publié : lun. 24/avr./2006 15:21
par Xain
j'utilise actuellement la 3.94.

Publié : lun. 24/avr./2006 15:30
par Xain
Flype, ta question m'a mis la puce à l'oreille. je viens d'installer la 4 b11 et la plus de problèmes (il a pris l'integralité de la ligne).

j'aurai dû installer la beta plus tot, mais les precedentes versions ne fonctionnaient pas correctement.

merci encore.

Publié : lun. 24/avr./2006 15:36
par Flype
bon ben tant mieux ;-)

peut etre que ton fichier source utilise un encodage un peu particulier (CR, LF, CRLF, UTF8, UTF16, etc... )

Publié : dim. 25/juin/2006 17:40
par Fortix
combient de version sont apparuts après la 3.94 (celle que j'ais actuellement)?

Publié : dim. 25/juin/2006 18:55
par Flype
uniquement la v4.0 pour windows

( + les correctifs disponibles sur www.purebasic.com/beta/ pour la v4 )

Publié : dim. 25/juin/2006 19:34
par Backup
ton problem venais que sur la V 3.94 le buffer des chaines etait limité !

il y avait moyen de modifier cela en utilisant ce code

Code : Tout sélectionner

; procedure pour augmenter le buffer des chaines dans le pure basic ,
; a appeler une seul fois !


Procedure SetStringManipulationBufferSize(Bytes)
  PBStringBase.l = 0
  PBMemoryBase.l = 0
  !MOV Eax, dword [PB_StringBase]
  !MOV [Esp+4],Eax
  !MOV Eax, dword [PB_MemoryBase]
  !MOV [Esp+8],Eax
  HeapReAlloc_(PBMemoryBase, #GMEM_ZEROINIT, PBStringBase, Bytes)
  !MOV dword [_PB_StringBase],Eax
EndProcedure 

ce code aurai fait marcher ton prg sur la version 3.94
en mettant un gros chiffre dans le parametres de la procedure !! :D

Publié : lun. 26/juin/2006 14:51
par Gillou
On pouvait pas faire ça avec Fileseek et readdata? je sais plus si fileseek existait déjà :roll: