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

Code : Tout sélectionner


debug "Erreur"

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. :lol: :lol:

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


Code : Tout sélectionner

debug "Encore une erreur"

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é :cry:

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 :)