Page 1 sur 1
Recherche remplacment en mode binaire
Publié : mer. 09/nov./2005 14:43
par Coolman
Pour ne pas reinventer la roue, je cherche une lib ou des routines permettant de faire une recherche remplacement directement dans une zone memoire, je m'explique, je charge un fichier de moins de 64 ko en mode binaire et je souhaite faire des manip dessus, c'est impossible en mode chaine car il y'a des codes ascil nul chr(0), je ne sais pas si j'ai eté clair...
note : j'ai fait des recherches sur les deux forums francais et anglais, mais je n'ai rien trouvé de concret, il est bizarre que personne ne se soit penché sur ce cas

Publié : mer. 09/nov./2005 15:49
par Oliv
Que veux-tu dire par charger en mode binaire ? Car avec purebasic à part (peut-être) avec ReadData(), je ne pense pas qu'il soit possible d'éviter les chaines
Publié : mer. 09/nov./2005 16:21
par Coolman
Effectivement, j'utilise ReadData()... un exemple est peut etre plus parlant :
res=ReadFile(#PB_Any,"e:\temp\test.grf")
If res
Longueur=Lof()
If longueur<30000
*Tampon=AllocateMemory(Longueur)
ReadData(*Tampon,Longueur)
.....
Je cherche une procedure similaire a ReplaceString mais dans mon cas je voudrais faire la meme chose dans la zone memoire *Tampon, j'ai envisagé plusieurs cas de figure, cela dit si quelqu'un l'a deja fait, je trouve inutile de reinventer la roue surtout que je n'ai pas beaucoup de temps en ce moment...
Par exemple, la syntaxe de replacestring dans la doc est la suivante :
ReplaceString(Chaine$, ChaineCherchee$, ChaineRemplacee$ [, Mode [, PositionDepart]])
j'envisage une procedure de ce type :
ReplaceStringBin(*Tampon,*ChaineCherchee, *ChaineRemplacee)
voila
Publié : mer. 09/nov./2005 16:42
par Coolman
Coolman a écrit :Effectivement, j'utilise ReadData()... un exemple est peut etre plus parlant :
res=ReadFile(#PB_Any,"e:\temp\test.grf")
If res
Longueur=Lof()
If longueur<30000
*Tampon=AllocateMemory(Longueur)
ReadData(*Tampon,Longueur)
.....
Je cherche une procedure similaire a ReplaceString mais dans mon cas je voudrais faire la meme chose dans la zone memoire *Tampon, j'ai envisagé plusieurs cas de figure, cela dit si quelqu'un l'a deja fait, je trouve inutile de reinventer la roue surtout que je n'ai pas beaucoup de temps en ce moment...
Par exemple, la syntaxe de replacestring dans la doc est la suivante :
ReplaceString(Chaine$, ChaineCherchee$, ChaineRemplacee$ [, Mode [, PositionDepart]])
j'envisage une procedure de ce type :
ReplaceStringBin(*Tampon,*ChaineCherchee, *ChaineRemplacee)
voila
J'avais oublié un detail, si la chaine recherché est differente de taille, il vaudrait mieux :
ReplaceStringBin(*Tampon,*TamponDest,*ChaineCherchee, *ChaineRemplacee)
les donnees que je compte traiter ne depasse pas 32 ko alors reservé pour TamponDest 64 ko par exemple pour compenser...
Publié : mer. 09/nov./2005 17:44
par Anonyme2
Coolman,
regardes ce topic
http://purebasic.hmt-forum.com/viewtopic.php?t=2141
je ne sais pas s'il y a ta réponse mais il y a plein de bonnes chose écrites par Hardy (ou es-tu ?)
Publié : mer. 09/nov./2005 18:02
par Coolman
Interessant en effet, cela dit hardy a l'air d'avoir concu ces routines pour optimiser accelerer, dans mon cas je suis obligé de proceder directement en memoire car la donnee que je traite comporte des caracteres ascils nul chr(0), purebasic considere apparement (comme la plupart des languages d'ailleurs) ce caractere comme fin de chaine d'ou l'impossibilité d'utiliser la commande recherche remplace classique...
je vais egallement voir plus en profondeur dans le forum anglais...
Merci en tous les cas du lien...