Replacement de chaine

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Patrick
Messages : 4
Inscription : jeu. 15/avr./2004 20:45

Replacement de chaine

Message 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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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$ 
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

Code : Tout sélectionner


debug "Erreur"
Dernière modification par julien le dim. 25/avr./2004 19:19, modifié 1 fois.
Patrick
Messages : 4
Inscription : jeu. 15/avr./2004 20:45

Remplacement de chaine

Message 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 ?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

:)
Dernière modification par nico le dim. 25/avr./2004 19:25, modifié 1 fois.
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message 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:
Patrick
Messages : 4
Inscription : jeu. 15/avr./2004 20:45

Manipulation de chaîne

Message 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
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message 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"
Dernière modification par julien le dim. 25/avr./2004 19:19, modifié 1 fois.
Patrick
Messages : 4
Inscription : jeu. 15/avr./2004 20:45

Message 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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

:)
Dernière modification par nico le dim. 25/avr./2004 19:25, modifié 1 fois.
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

oui j'avais vu mais j'vais déja posté :cry:
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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

Dernière modification par nico le dim. 25/avr./2004 20:20, modifié 3 fois.
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message 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)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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 :?
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

tu n'est pas obliger d'utiliser pokes() pour le remplir ;) c'etait juste pour montrer que sa marchais :)
Répondre