Recherche remplacment en mode binaire

Sujets variés concernant le développement en PureBasic
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Recherche remplacment en mode binaire

Message 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 :?:
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message 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
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message 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
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message 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...
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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 ?)
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

Denis a écrit :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 ?)
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...
Répondre