Page 1 sur 1

FindString, ReplaceString et équivalent de scanf et sprintf

Publié : mer. 22/juin/2005 6:50
par Oncle Karl
Bonjour,

Je tiens à signaler mon enthousiasme pour ce compilo que je découvre depuis quelques jours, ou plutôt depuis quelques nuits.


Voici mes interrogations :
1 - L'aide indique que CountString trouve toutes les occurences de la chaine cherchée. Si je cherche "-.", et que ma source contient "---.", CountString retourne 1 ou 3 ?

2 - Idem pour ReplaceString
Si je souhaite remplacer "-. par "." dans une chaine "---.", 1 appel à ReplaceString effectuera 1 ou 3 remplacements ?

3 - Pour effectuer tous les remplacements, un code comme celui-ci est-il correct (en suposant que Chaine contienne "---.") ?

Code : Tout sélectionner

While FindString(Chaine, "-.", 1)
  Chaine = ReplaceString(Chaine, "-.", ".")
Wend
4 - Codant habituellement en C, j'utilise des fonctions de traitement de chaînes comme SCANF ou SPRINTF, pour formater la lecture ou l'écriture.
Existent-ils des équivalents en PureBasic ?


Merci pour votre soutien aux débutants.

Publié : mer. 22/juin/2005 11:34
par nico
Prend le courage de lire l'aide , c'est en français; en plus avec 2 lignes de code t'as la réponse, il suffit de tester!

Publié : mer. 22/juin/2005 13:07
par Oncle Karl
J'ai bien parcouru l'aide et j'ai bien fait des tests, et c'est justement pour ça, que j'ai posté dans le forum (le résultat de mes tests me laissant dubitatifs).

A moins que je sois passé au travers, mais bon ...

Une réponse du type (ceci n'est qu'un exemple ;o)) :
1 - 1
2 - 1
3 - Ok c'est cool
4 - non ca n'existe pas
me serait d'une plus grande aide

PS : Merci de ne pas oublier que je débute avec PureBasic

Publié : mer. 22/juin/2005 13:26
par Oliv
1

Code : Tout sélectionner

Debug CountString("---.","-.")
2

Code : Tout sélectionner

Debug ReplaceString("---.","-.",".")
3
Substitue toutes les occurences de 'ChaineCherchee$' trouvées dans 'Chaine$' par 'ChaineRemplacee$'. Le paramètre 'PositionDepart' est facultatif et permet de de specifier à partir de quel caractère le remplacement doit être effectué
4
ReplaceString()

Syntaxe

String$ = ReplaceString(Chaine$, ChaineCherchee$, ChaineRemplacee$ [, Mode [, PositionDepart]])
PS : Il serait temps d'apprendre à lire

Publié : mer. 22/juin/2005 14:43
par Oncle Karl
Merci pour cet accueil chaleureux :?

Mon besoin est de rechercher et remplacer toutes les occurences de la chaine cherchée dans la chaine source y compris celles qui peuvent apparaitre suite à la modification précédente.

ReplaceString("---.", "-.", ".")) retournera "--."
Donc, 1 seule occurence trouvée.
Or, dans cette chaine finale, la chaine cherchée "-." existe encore.

D'où ma troisième question sur la boucle while (enfin, si vous avez lu jusque là).
Entre temps, je suis passé par une fonction récursive

Merci encore

Publié : mer. 22/juin/2005 17:09
par comtois
Oncle Karl a écrit :PS : Merci de ne pas oublier que je débute avec PureBasic
T'inquiète, personne n'oublie :)

C'est juste que tes questions n'ont rien à voir avec le fait de connaitre ou non PureBasic , un simple test de ta part et tu pouvais obtenir les réponses . D'ailleurs c'est ce que tu as fini par faire , comme quoi tu es parfaitement apte pour chercher un peu avant de poser ce genre de questions :)

Bien sûr tes questions seront les bienvenues si tu buttes vraiment sur un problème et en montrant comment tu as tenté de le résoudre.

C'est pourquoi tu verras qu'on demande souvent un bout de code , ça permet de mieux cerner le problème et comment aider au mieux.


Et bienvenue à toi

Publié : mer. 22/juin/2005 17:14
par Oliv
Oncle Karl a écrit :Merci pour cet accueil chaleureux :?

Mon besoin est de rechercher et remplacer toutes les occurences de la chaine cherchée dans la chaine source y compris celles qui peuvent apparaitre suite à la modification précédente.

ReplaceString("---.", "-.", ".")) retournera "--."
Donc, 1 seule occurence trouvée.
Or, dans cette chaine finale, la chaine cherchée "-." existe encore.

D'où ma troisième question sur la boucle while (enfin, si vous avez lu jusque là).
Entre temps, je suis passé par une fonction récursive

Merci encore
Voilà quand tu décris clairement ton problème c'est mieux :D

Code : Tout sélectionner

Chaine.s = "kjhfkgjr---.dfr--.effrerf"
Debug Chaine
While CountString(Chaine,"-.")
  Chaine = ReplaceString(Chaine,"-.",".")
Wend
Debug Chaine
Essai-ce ça que tu voulais faire ?

Publié : jeu. 23/juin/2005 7:22
par Oncle Karl
Ok.

J'ai procédé à des test de différentes fonctions :
récursif, while + count, while + find, repeat + count, repeat + find.
Mon code le plus rapide est celui-ci

Code : Tout sélectionner

Procedure.s ReplaceStringWhileFind(Chaine$, ChaineCherchee$, ChaineRemplace$)
  While FindString(Chaine$, ChaineCherchee$, 1) 
    Chaine$ = ReplaceString(Chaine$, ChaineCherchee$, ChaineRemplace$)
  Wend
  ProcedureReturn Chaine$
EndProcedure

Publié : jeu. 23/juin/2005 11:19
par comtois
juste pour info , sur le forum anglais , quelqu'un avait la même question que toi , tu trouveras d'autres réponses possibles :

http://forums.purebasic.com/english/vie ... hp?t=15677

Publié : ven. 24/juin/2005 12:19
par Oncle Karl
OK. Merci.

Effectivement, problème similaire, et une solution à base de manipulation de chaine que je vais creuser