FindString()

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

FindString()

Message par falsam »

Version 4.51
FindString(Chaine$, ChaineCherchee$, PositionDepart)

Version 4.60
FindString(Chaine$, ChaineCherchee$, [PositionDepart])

la position de départ n'est plus obligatoire en version 4.60.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: FindString()

Message par Kwai chang caine »

Et ben ça c'est pas dommage 8)
La plupart du temps on cherche du début, et a chaque fois j'l'oublie ce satané 1 :?

J'v'ais encore faire mon monsieur + , mais c'est dommage qu'il y ai pas, un FindString(Chaine$, ChaineCherchee$, - 10) par exemple ou bien un FindStringRev(Chaine$, ChaineCherchee$, [PositionDepart]) car souvent j'ai besoin de recherches en partant de la fin jusqu'au début.

Pour une fois VB6 marque un point : InStrRev, fonction
Description
Renvoie la position d'une occurrence d'une chaîne dans une autre, à partir de la fin de la chaîne.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: FindString()

Message par falsam »

Kwai chang caine a écrit :c'est dommage qu'il y ai pas, un FindString(Chaine$, ChaineCherchee$, - 10) par exemple ou bien un FindStringRev(Chaine$, ChaineCherchee$, [PositionDepart]) car souvent j'ai besoin de recherches en partant de la fin jusqu'au début.

Pour une fois VB6 marque un point : InStrRev, fonction
Description
Renvoie la position d'une occurrence d'une chaîne dans une autre, à partir de la fin de la chaîne.
Rhoooo tu es énervant :) tu aurais pu coder cette fonction et même te faire une lib .

Rien que pour toi :

InStrRev : Retourne la position de la première occurrence d'une chaîne dans une autre, à partir du côté droit de la chaîne. En option tu peux préciser la position de départ à partir de la fin de cette chaine à parcourir.

Code : Tout sélectionner

InStrRev V 1.00
;Retourne la position de la première occurrence d'une chaîne 
;dans une autre, à partir du côté droit de la chaîne.

Procedure InStrRev(String.s, StringToFind.s, StartPosition.i=1)
  Protected Buffer.s      ;Chaine à parcourir
  Protected FindPosition.i;Position ou se trouve la chaine recherché
  Protected x.i           ;Indice de parcours de la chaine à inspecter
  
  ;Formatage de la chaine à parcourir
  Buffer=Mid(String, 1, Len(String)-(StartPosition-1)) 
  
  ;Et c'est parti .......
  x=-1
  While x<>0
    x=FindString(Buffer, StringToFind, x+Len(StringToFind))
    If x<>0
      Findposition=x
    EndIf
  Wend
  ProcedureReturn FindPosition
EndProcedure
Pour le test

Code : Tout sélectionner

Buffer$="Combien de 'ien' contient le mot chien ?"
Debug InStrRev(Buffer$, "ien")
Libre à toi de renommer cette procédure FindStringRev
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: FindString()

Message par Kwai chang caine »

Merci beaucoup mon bon FALSAM 8)
C'est ce que j'ai fait évidemment....

Mais pourquoi a ce moment la ne pas coder la fonction FindString, c'est facile, une énumération de chaque caractère et si on trouve celui qu'on cherche "ProceMolleReviens" de la position :mrgreen:
Et puis tiens facile le StringField, on recherche en énumérant toujours le séparateur, et on découpe la phrase par chaque morceau entre chaque, et en plus on ferait encore mieux que FRED, car on faisant mon monsieur +, je ne vois pas pourquoi il a limité le séparateur a un seul caractère, ma fonction pourrait en avoir 2,4,6,100 :mrgreen:

A ce moment la, on en viens a ce que disait GRom, des fonctions vraiment de bases, et le reste faut faire chacun les nôtres :roll:

Une partie des fonctions peuvent être réécrites, ce n'est pas le problème.
Mais ce que je dis, c'est que tant qu'a faire un langage, il serait cool de jeter un œil sur les voisins
Et si y'a une chose que j’apprécie pas du tout c'est que VB6 sache faire NATIVEMENT quelque chose de simple que PB ne sait pas. :twisted:
Et quand on fait une fonction, faut essayer de la compléter au maximum, afin qu'elle gère presque tous les cas.
De plus, je pense que coder directement en C, doit quand même être plus rapide que de réutiliser des fonctions pour en faire d'autres :roll:

C'est plus facile à dire qu'a faire, le problème n'est pas de ne pas y avoir pensé, c'est de ne pas l'avoir rajouté, car ça m’étonnerais que quelqu'un n'ai pas demandé ça un jour.
Je trouve dommage que FRED ne prenne pas plus en considération ce genre de petites demandes, qui a mon avis ne doivent pas modifier le noyau de PB :roll:
J'y connais rien en C, mais recréer une fonction partant de l'inverse, ne doit pas mettre en péril la stabilité de la V4.61 :?

Je reste à dire que les grosses modifs sont super, évidemment, bien que la plupart du temps elles ne me servent presque pas.
Je me dis KCC faut pas penser qu'a ta gueule...mais quand même si une fois FRED se disait, tiens sur cette version on va pas inventer un moteur 5D, avec intégration de la LIB TrucMuche, qui permettra de gérer un truc de ouf, etc...
Cette fois, je vais penser à tous les petits qui eux demandent des petites fonctions bien pratiques, quand ils codent tous les jours
Cette fois au lieu de faire une mega évolution, je vais incorporer 200 petites modifs, que tous le monde réclame depuis le début.
Ca fera autant de boulot, surement moins de risque de plantage qu'un canvasgadget, et chacun aura l'impression, d'avoir eu son petit cadeau 8)

De plus toutes ces fonctions mises bout à bout pourrait rendre encore plus attractif ce langage
C'est comme tout, les petits ruisseaux font les grandes rivières...y'a pas que ce qui est gros, puissant, cher qui est important.
Les petites choses, les plus simples peuvent parfois être indispensables pour terminer un gros œuvre

Regarde un constructeur, il a beau avoir 22 pelleteuses, des grues, et tout le toutim
Si il lui manque une petite clef de 13, et ben toute la construction de ground zero peut être arrêté :?


Ca m'a déjà assez gonflé qu'on puisse pas gérer l'OLE, mais ça, je l'ai compris, c'est peut être copyright BILOU, en plus c'est super dur a faire, etc...
Heureusement que SROD et TsSoft sont passé par la pour rajouter une fonction importante a PB, qui existait pour le C, et lui permettre de jouer dans la cour des grands.

Les LIB perso, je suis contre, car quand on change de machine, ou qu'on se file les codes, etc....a chaque fois, je lis :"Excusez moi, ça c'est une lib perso, et j'ai oublié que vous l'aviez pas" :?

En fin de compte, je me dis parfois que pour PB, c'est comme dans la vie....y'en a que pour les puissants :(
Dernière modification par Kwai chang caine le mer. 07/sept./2011 16:37, modifié 1 fois.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: FindString()

Message par falsam »

je vois que ce n'est pas forme hein ? alors une tisane et au lit :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Re: FindString()

Message par GeBonet »

@Falsam
Bonjour,
Pour chercher a l'envers utiliser :
Resultat$ = FindString(ReverseString(Chaine$),Machaine$)
ça marche :lol:
Windows 7 et Windows 8.1 Pb 5.0 jusque 5.24 Lts 64 et 5.3 (64)/b]
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: FindString()

Message par Kwai chang caine »

je vois que ce n'est pas forme hein ? alors une tisane et au lit :)
Tu as tord de le prendre comme ça...
C'est par ce genre de réflexion que l'on avance jamais :?
C'est pas parce que on pousse un coup de gueule qu'on a tord et qu'on est un emmerdeur :(
Beaucoup de choses ne se seraient jamais passées si y'avait pas eu des gens qui disent ce qu'il faut dire au bon moment.
Meme si ça fait pas plaisir a tout le monde :cry:
GeBonet a écrit :@Falsam
Bonjour,
Pour chercher a l'envers utiliser :
Resultat$ = FindString(ReverseString(Chaine$),Machaine$)
ça marche :lol:
Salut mon bon GEBONET 8)
Cool ...ça c'est une idée que j'aurais pas pensé 8O
C'est vrai que c'est plus court que de recoder la fonction 8)

Merci, je la garde dans ma besace, il n'en reste pas moins que ce doit être moins rapide que codée direct en C :roll:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: FindString()

Message par falsam »

GeBonet a écrit :@Falsam
Resultat$ = FindString(ReverseString(Chaine$),Machaine$) ça marche :lol:
Hein ? Quoi ? je dois être bradycéphale (J'adore)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Re: FindString()

Message par GeBonet »

En fait il faut pas oublier que l'on recherche à partir de la fin quelque chose qui est à l'endroit... :wink:
Bref, c'est sur le fait que "ReverseString(Chaine$)" inverse la chaine qu'il faut jouer...
Si on cherche le dernier "o" ou "on" de "il ont contribuer à la constitution" alors c'est intéressant...
Mais pour "on", il faut pas oublier alors que le mot que l'on cherche, ce n'est plus "on" mais "no" :roll:
@Kcc,
Ben oui, probablement que ça va plus vite en "c", mais tu vois tout est relatif... ReverseString(Chaine$) est plus certainement plus rapide que la "Procedure InStrRev(String.s, StringToFind.s, StartPosition.i=1)" cité plus haut... Mais en fait a un certain moment ou est la différence entre vite et très vite... 1 mnisec et 5 minisec.. si on ne le fait qu'un fois de temps en temps ?
En plus la machine suivante, elle va 5 ou 10 fois plus vite, alors dans l'absolu, ou est la différence ?
On se chatouille souvent pour se faire rire non ? :wink:
La dessus, bises à tous,
Gerhard
Windows 7 et Windows 8.1 Pb 5.0 jusque 5.24 Lts 64 et 5.3 (64)/b]
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: FindString()

Message par Kwai chang caine »

C'est pas faux, pour la rapidité :roll:
Ca reste juste plus long a écrire, et moins facile à lire....
En tout cas bien vu, l'aveugle :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre