FindString, ReplaceString et équivalent de scanf et sprintf

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Oncle Karl
Messages : 10
Inscription : mer. 22/juin/2005 6:23

FindString, ReplaceString et équivalent de scanf et sprintf

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

Message 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!
Oncle Karl
Messages : 10
Inscription : mer. 22/juin/2005 6:23

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

Message 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
Oncle Karl
Messages : 10
Inscription : mer. 22/juin/2005 6:23

Message 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
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

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

Message 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 ?
Oncle Karl
Messages : 10
Inscription : mer. 22/juin/2005 6:23

Message 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
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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
Oncle Karl
Messages : 10
Inscription : mer. 22/juin/2005 6:23

Message par Oncle Karl »

OK. Merci.

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