ReadString()

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Xain
Messages : 7
Inscription : lun. 24/avr./2006 14:11
Localisation : Andolsheim

ReadString()

Message 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.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

bonjour,

avec quel version de purebasic as tu essayé ?
Image
Xain
Messages : 7
Inscription : lun. 24/avr./2006 14:11
Localisation : Andolsheim

Message par Xain »

j'utilise actuellement la 3.94.
Xain
Messages : 7
Inscription : lun. 24/avr./2006 14:11
Localisation : Andolsheim

Message 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.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

bon ben tant mieux ;-)

peut etre que ton fichier source utilise un encodage un peu particulier (CR, LF, CRLF, UTF8, UTF16, etc... )
Image
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message par Fortix »

combient de version sont apparuts après la 3.94 (celle que j'ais actuellement)?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

uniquement la v4.0 pour windows

( + les correctifs disponibles sur www.purebasic.com/beta/ pour la v4 )
Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
Gillou
Messages : 373
Inscription : sam. 28/août/2004 17:35
Localisation : Bretagne, 22
Contact :

Message par Gillou »

On pouvait pas faire ça avec Fileseek et readdata? je sais plus si fileseek existait déjà :roll:
Répondre