Page 1 sur 2
Replacement de chaine
Publié : dim. 25/avr./2004 18:24
par Patrick
Quelqu'unj connait t-il la solution pour faire un remplacement globale d'une chaine
Exemple Chaine d'origine " ABCDEBCR"
Chaine à remplacer "B" par "F"
Avec Pure Basic Chaine résultatnte "= " AFCDEBCR"
Avec visaul basic et Instr --> les deux B ayant été remplacés par F
Chaine résultante "AFCDEFCR"
La fonction StringReplace de PureBasic n'agissant que sur la premiére occurence et pas sur les suivantes
Merci par avance
Publié : dim. 25/avr./2004 18:36
par nico
Extrait de la Doc:
Code : Tout sélectionner
Syntaxe
String$ = ReplaceString(Chaine$, ChaineCherchee$, ChaineRemplacee$ [, Mode [, PositionDepart]])
Description
Substitue toutes les occurences de 'ChaineCherchee$' trouvées dans 'Chaine$' par 'ChaineRemplacee$'.
Exemple:
Code : Tout sélectionner
chaine_origine$= " ABCDEBCR"
ChaineCherchee$="B"
ChaineRemplacee$="F"
chaine_resultante$ = ReplaceString(chaine_origine$, ChaineCherchee$, ChaineRemplacee$)
Debug chaine_resultante$
Publié : dim. 25/avr./2004 18:43
par julien
Remplacement de chaine
Publié : dim. 25/avr./2004 18:48
par Patrick
Le seul problême dans mon cas c'est que je manipule des chaines supérieures à 64 K° et que dans ce cas là la fonction StringReplace plante le logiciel PUREBASIC. Quelqu'un connait-il une parade ?
Publié : dim. 25/avr./2004 18:49
par nico
Publié : dim. 25/avr./2004 18:52
par julien
@Nico
Quand j'ai regardé le post il n'y avait pas de réponse
Tu as posté le temps que j'ecrive ce bout de code soit environ 3 minutes.

Manipulation de chaîne
Publié : dim. 25/avr./2004 18:55
par Patrick
Nico , nous ne sommes pas là pour nous invetciver mais au contraire pour nous aider mutuellement, et quand on est débutant en Pure Basic toutes les réponses sont bones à prendre
Publié : dim. 25/avr./2004 19:00
par julien
ce n'est pas un problème de la fonction mais de la variable puisque ceci plante
Publié : dim. 25/avr./2004 19:02
par Patrick
Normal puisqu'avant de charger ta variable tu dois lui passer la fonction suivante SetStringManipulationBufferSize(1084576) qui permet de dimensionner les varaibles supérieures à 64 K
Publié : dim. 25/avr./2004 19:05
par nico
Publié : dim. 25/avr./2004 19:08
par julien
oui j'avais vu mais j'vais déja posté

Publié : dim. 25/avr./2004 19:11
par nico
Ce code à été rééditer:
Code : Tout sélectionner
Procedure Remplace_Chaine(Fichier.s,ChaineCherchee$,ChaineRemplacee$)
#Fichier=0
#FichierTempraire=1
;Ici on cré un fichier temporaire sous le même répertoire
For a= Len(Fichier) To 1 Step -1
If Mid(Fichier, a, 1) ="\"
FichierTemporaire.s=Mid(Fichier, 1,a)+"Temporaire.temp"
;Debug Fichier2
Break
EndIf
Next a
If CopyFile(Fichier,FichierTemporaire)
If OpenFile(#FichierTempraire, FichierTemporaire)
If CreateFile(#Fichier, Fichier)
While Eof(#FichierTempraire)=0
UseFile(#FichierTempraire)
chaine$=ReadString()
chaine_resultante$ = ReplaceString(chaine$, ChaineCherchee$, ChaineRemplacee$)
UseFile(#Fichier)
WriteStringN(chaine_resultante$)
Wend
CloseFile(#Fichier)
retour.b=#True
EndIf
CloseFile(#FichierTempraire)
;Le fichier temporaire est une copie du fichier original
;vous pouvez le supprimer avec ces lignes:
;If DeleteFile(FichierTemporaire)=0
; MessageRequester("Info","Le fichier Temporaire n'a pu être supprimer")
;EndIf
EndIf
EndIf
ProcedureReturn retour
EndProcedure
Chemin$ = OpenFileRequester("Choisir un fichier", "", "Fichier texte (*.txt) |*.txt|All Files|*.*", 0)
If Chemin$
;Exemple pour remplacer mercredi par jeudi sur toutes les occurences.
If Remplace_Chaine(Chemin$,"mercredi","jeudi")
MessageRequester("Info","opération réussi")
EndIf
EndIf
Publié : dim. 25/avr./2004 19:44
par cederavic
voilas
Code : Tout sélectionner
Procedure ReplaceLargeString(*s1, len.l, k.l, s2.s, s3.s)
If k > len
ProcedureReturn -1
EndIf
res = -1
ll = Len(s2)
Repeat
te.s = Mid(PeekS(*s1), k, ll)
If te = s2
*s1 + k + ll - 1
PokeS(*s1 + k -1 - k - ll + 1, s3 + PeekS(*s1))
res = 1
EndIf
k + 1
Until k > len
ProcedureReturn res
EndProcedure
*test = AllocateMemory(80000)
PokeS(*test, "testt hatt kitattitato")
s.s = "tt"
ss.s = "bkb"
Debug ReplaceLargeString(*test, 80000, 0, s, ss)
Debug PeekS(*test)
Publié : dim. 25/avr./2004 20:06
par nico
Cedravic,
*test = AllocateMemory(80000)
chaine$="blablabla......" > 64Ko (impossible)
PokeS(*test, chaine$)
C'est toujours le même problème, ça ne fonctionnera pas

Publié : dim. 25/avr./2004 20:09
par cederavic
tu n'est pas obliger d'utiliser pokes() pour le remplir

c'etait juste pour montrer que sa marchais
