LimitedFindString

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

LimitedFindString

Message par dayvid »

bonjour !

voila j'ai crée sa et j'aimerais votre avis et votre aide pour l'améliorer encore

Code : Tout sélectionner

;{ crée par Mr Dieppedalle David le mardi 6 juillet 2010

; cette commande sert a rechercher ce que l'ont veut et d'où l'on veut
; celle-ci est assez souple puisqu'elle permet par exemple de rechercher a partir
; du début ou de la fin de la chaine, elle permet entre autre de préciser la longueur
; de la recherche en précisant la position de recherche de départ et celle de la fin
; il est de même possible de préciser si la case est conserver ou non
; et pour finir de préciser si l'ont veut chercher un mot uniquement

; Chaine$ = la chaine dans la quel doit chercher le programme
; ChaineChercher$ = ce que doit chercher la commande
; PositionDepart = la position de départ de la recherche:

; si le nombre entrée est inférieur a -1
; alors -1 sera envoyer a la commande
; de même que si le nombre est supérieur a la longueur de la chaine
; alors longueur de la chaine sera envoyer a la commande

; -1 signifie rechercher a partir de la fin de la chaine


; PositionFin = la position d'arrêt de la recherche, cella veut dire que
; une fois que la commande arrivera a cette position, elle arrêtera la recherche:

; si le nombre entrée est inférieur a -1
; alors -1 sera envoyer a la commande
; de même que si le nombre est supérieur a la longueur de la chaine
; alors longueur de la chaine sera envoyer a la commande

; -1 signifie rechercher dans la totalité de la chaine


; MotEntierSeullement = le mode de la recherche

; si ce mode est inférieur à 0, alors 0 sera retourner a la commande
; sinon si le mode est supérieur à 1, alors 1 sera retourner a la commande
; sinon si le mode est égale à 1, alors le mode "mot entier seullement" sera activé

; ce mode permet de rechercher uniquement les termes qui forment un mot
; les termes qui contiennent le mot recherché ne seront pas retenus
 
; par exemple si vous rechercher "anti" et que il y a par exemple "antitrust"
; la commande retournera 0 car "anti" n'aura pas été trouvé en tans que mot entier


; cette commande (LimitedFindString) peut être très utile par exemple pour
; rechercher du texte dans un fichier texte par exemple
;}
; le programme:
Procedure.l LimitedFindString(Chaine$, ChaineChercher$, PositionDepart, PositionFin, ModeCase, MotEntierSeullement)

LongueurChaine = Len(chaine$)

If ModeCase <= 0
ModeCase = 0
Chaine$ = LCase(Chaine$)
ChaineChercher$ = LCase(ChaineChercher$)
ElseIf ModeCase >= 1
ModeCase = 1
EndIf

PositionFin - 1

If MotEntierSeullement < 0
MotEntierSeullement = 0
ElseIf MotEntierSeullement > 1
MotEntierSeullement > 0
EndIf

If PositionDepart = 0
; la position de depart de recherche 0 n'éxiste pas donc ont la remet a 1
PositionDepart = 1
EndIf

If PositionDepart > LongueurChaine
; la position de depart de recherche 0 n'éxiste pas donc ont la remet a 1
PositionDepart = LongueurChaine + 1
EndIf

If PositionDepart <= -1
; si la position de depart est inférieur ou égale à -1, cella veut dire
; que l'ont commence la recherche a partir de la fin de la chaine
PositionDepart = LongueurChaine
EndIf

If PositionFin = 0
; la position d'arriver de recherche 0 n'éxiste pas donc ont la remet a 1
PositionFin = 1
EndIf

If PositionFin > LongueurChaine
; la position d'arriver de recherche 0 n'éxiste pas donc ont la remet a 1
If PositionDepart = LongueurChaine
PositionFin = 1
Else
PositionFin = LongueurChaine + 1
EndIf
EndIf

If PositionFin <= -1
; si la position de fin est inférieur ou égale à -1, cella veut dire
; que l'ont arrêtte la recherche une fois la fin de la chaine trouvé
If PositionDepart = LongueurChaine
PositionFin = 1
Else
PositionFin = LongueurChaine + 1
EndIf
EndIf

If PositionDepart = LongueurChaine And PositionFin = 1
PositionFin = LongueurChaine - 1
EndIf

If PositionDepart > PositionFin
; cella veut dire que la recherche s'éfféctue de droite à gauche
PositionExtraction = LongueurChaine
While PositionExtraction <> LongueurChaine - PositionFin
ExtractionCaractere$ = Mid(Chaine$, PositionExtraction, 1)
If ExtractionChaine$ = ""
ExtractionChaine$ = " "
EndIf
ExtractionChaine$ = InsertString(ExtractionChaine$, ExtractionCaractere$, 1)

If FindString(ExtractionChaine$, ChaineChercher$, 1)
Extraction = LongueurChaine - PositionExtraction + 2

If MotEntierSeullement = 1
Extraction = PositionExtraction
DebutChaine = PositionExtraction
Repeat
caracteres$ = Mid(Chaine$, Extraction, 1)
If caracteres$ <> " " And caracteres$ <> Chr(9)
Extraction + 1
Continue
Else
FinChaine = Extraction

If Mid(Chaine$, DebutChaine, FinChaine - DebutChaine) = ChaineChercher$
ProcedureReturn LongueurChaine - PositionExtraction + 2
Else
ProcedureReturn 0
EndIf
EndIf

ForEver

Else
ProcedureReturn LongueurChaine - PositionExtraction + 2
EndIf

Else
PositionExtraction - 1
EndIf
Wend

ElseIf PositionFin > PositionDepart
; cella veut dire que la recherche s'éfféctue de gauche à droite
PositionExtraction = PositionDepart
While PositionExtraction <> PositionFin
ExtractionCaractere$ = Mid(Chaine$, PositionExtraction, 1)
ExtractionChaine$ + ExtractionCaractere$
If FindString(ExtractionChaine$, ChaineChercher$, 1)
PositionExtraction = FindString(ExtractionChaine$, ChaineChercher$, 1)

If MotEntierSeullement = 1
Extraction = PositionExtraction
DebutChaine = PositionExtraction
Repeat
caracteres$ = Mid(Chaine$, Extraction, 1)

If caracteres$ <> " " And caracteres$ <> Chr(9)
Extraction + 1
Continue
Else
FinChaine = Extraction

If Mid(Chaine$, DebutChaine, FinChaine - DebutChaine) = ChaineChercher$
ProcedureReturn PositionExtraction = FindString(ExtractionChaine$, ChaineChercher$, 1)
Else
ProcedureReturn 0
EndIf
EndIf

ForEver

Else
ProcedureReturn PositionExtraction
EndIf


Else
PositionExtraction + 1
EndIf
Wend

Else

EndIf


EndProcedure

; exemple:
recherche = LimitedFindString("il étais une fois un petit garçon qui étais vraiment tout petit", "tout", -1, -1, 0, 0)
Debug recherche

alors en réalité ceci n'as pas été crée aujourd'hui mais il y as deux ou troix jour
par contre j'ai essayer divers chose dons certaine qui n'ont pas fonctionné comme
je l'aurais voulue donc je les ais enlever et puis j'en est r'ajouté d'autre
c'est déja asser complet mais pas très optimiser je supose mais sa marche, c'est le principale non ?

j'aimerais bien r'ajouté une fonction pour que quand il rencontre une chaine de caractères
qu'il l'igniore si le paramètre est a 1, et une pour igniorer les commantaires
évidement, il faut que l'ont puisse aussie choisir le caractère qui defini une chaine
et le caractère qui définie le commantaire, voila voila a plus :lol:
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: LimitedFindString

Message par SPH »

Le code contient une erreur. Mais bref, il est tres long et je ne sais pas trop où tu voulais en arriver !
En fait, tu cherches une chaine de caractere dans une autre chaine, c'est ca ?

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: LimitedFindString

Message par dayvid »

oui c'est sa mais avec des function bien utile
une erreur ou sa ?

pourquoi, c'est pas bien ? :(
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Re: LimitedFindString

Message par Cls »

C'est un bon début, même si ne ne vois pas tout à fait l'utilité d'une telle fonction.

Pour extraire / modifier / détecter du contenu, il existe les expression régulières qui permettent de réaliser des traitements très puissants de manière optimisée. Leur écriture est complexe au début mais avec le temps elles deviennent indispensables. ;)
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: LimitedFindString

Message par Geo Trouvpatou »

Chez moi ça ne fonctionne pas.
Erreur ligne 67

Pourquoi n'utilises-tu pas des arguments facultatifs pour ta fonction.

Indentes ton code aussi.
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: LimitedFindString

Message par kernadec »

yesssss
67 MotEntierSeullement = 1
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: LimitedFindString

Message par SPH »

dayvid a écrit :oui c'est sa mais avec des function bien utile
une erreur ou sa ?

pourquoi, c'est pas bien ? :(
Si, c'est bien mais si c'est JUSTE pour trouver une chaine dans une autre, ca se fait en 5 lignes de code. C'est pour ca que je te demandais si ton code fait autre chose

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: LimitedFindString

Message par Ar-S »

Comme le dit CLS, l'expression régulière pourrait te simplifier la vie même si c'est chaud à syntaxer (perso je galère toujours)

Voilà un petit code de Scrat de ce post que j'ai a peine modifié pour arriver au même résultat que toi.

Code : Tout sélectionner

tonTexte.s="il étais une fois un petit garçon qui étais vraiment tout petit"
Dim result$(0) 
CreateRegularExpression(0,"[\H]+[\S]") 
NbFound = ExtractRegularExpression(0, tonTexte , result$()) 
For k = 0 To NbFound-1 
  If result$(k) = "tout"
    Debug NbFound-1
  EndIf
Next 
FreeRegularExpression(0) 
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: LimitedFindString

Message par Le Soldat Inconnu »

En simplifiant, on obtient

Code : Tout sélectionner

Procedure FindStringPlus(String.s, StringToFind.s, StartPosition.l = 1, EndPosition.l = 0, NoCase.l = 0, FullWord = 0)
	
	If NoCase = 1
		String = LCase(String)
		StringToFind = LCase(StringToFind)
	EndIf
	
	If EndPosition <= 0
		EndPosition = Len(String) + EndPosition
	EndIf
	
	Position = StartPosition - 1
	Repeat
		Position + 1
		Before.s = ""
		After.s =""
		Position = FindString(String, StringToFind, Position)
		
		If Position > EndPosition
			Position = 0
		EndIf
		
		If Position > 1
			Before.s = Trim(Mid(String, Position - 1, 1))
		EndIf
		If Position > 0
			After.s = Trim(Mid(String, Position + Len(StringToFind), 1))
		EndIf

	Until FullWord = 0 Or Position = 0 Or (Before = "" And After = "")
	
	ProcedureReturn Position
EndProcedure

Texte.s = "Coucou je suis un texte plein de toutou tout bizarre pour tester si ça marche à tout les coups"
Debug Len(Texte)
Debug FindStringPlus(Texte, "Cou", 2)
Debug FindStringPlus(Texte, "Cou", 2, 0, 1)
Debug FindStringPlus(Texte, "Cou", 2, 0, 1, 1)
Debug FindStringPlus(Texte, "cou", 8, -10, 0)
Debug FindStringPlus(Texte, "cou", 10, 0, 0)
Debug FindStringPlus(Texte, "tout", 1, 0, 0, 1)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: LimitedFindString

Message par dayvid »

bonjour

merci les amis :P

c'est vrais que je recoannais a 100 % que je me casse la tête pour rien du tout :(

il éxiste des truc tout bien pour faire ce genre de chose et moi
je fait une commande a 300 ligne de code pour rien :|

pfffffou (soupir) je déprime de mois même des fois mais bon c'est la vie :twisted:

en faite j'ai besoin de cette fonction pour rechercher une chaine vraiment très précise
et je crois que vous m'avez re-mis dans voix bonne notament avec regularexpresion
merci notament a solda inconue qui ma donner un code plus simple
je me demande ce que je ferais sans vous hein :D

je me casse la tête pour bien rien des fois, désoler :?
aller je continue sur ma lancer, a plus les amis :wink:
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: LimitedFindString

Message par Ar-S »

On ne se casse jamais la tête pour rien...
ça fait travailler les cellules grises, et c'est déjà pas mal :mrgreen: !
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: LimitedFindString

Message par dayvid »

salut :P

j'ai étudier l'exemple du solda inconnue, nan sans blague
sa parais si simple comme sa et pourtant j'ai rien capté :lol:

j'ai bien du chemin a parcourir moi avent d'arriver au orteil
de notre ami le solda inconnue :?

bon sinon moi j'ai tout recommencer depuis le début mais
hélas je rame un max, je fait de mon mieux mais je patauge
pourtant sa ma l’air si simple de crée ce genre de chose
mais la réalité en est tout autre croyez moi (soupir)

je continue sur ma lancer encore mais j’ai encore besoin d’un coup de pouce
voila je souhaiterais faire la même chose mais en bien mieux

FindStringPlus(chaine$, chainechercher$, positiondepart, positionfin, modecase, igniorerlescommantaire, igniorerleschaine, igniorerlesaccent)

Pour la position de départ, si elle est = à -1, sa veut dire recherche a partir de la fin de la chaine vers le début
Si elle est inférieur a -1 sa veut dire la même chose sauf que la c’est donc rechercher a la fin de la chaine – le supplément, exemple : -5 veut dire a la fin de la chaine – 4
Pour la position de fin, si elle est = à -1, sa veut dire recherche terminer a la fin de la chaine
Si elle est inférieur a -1 sa veut dire la même chose sauf que la c’est donc terminer a la fin de la chaine – le supplément, exemple : -5 veut dire a la fin de la chaine – 4
Si la position de départ est supérieur a la position de fin, sa veut dire que l’ont recherche de la fin de la chaine vers le début et je retourne le résulta de la recherche depuis la fin de la chaine
Si la position de fin est supérieur a la position de départ, sa veut dire que l’ont recherche du début vers fin de la chaine et je retourne le résulta de la recherche depuis le début de la chaine

Mais attention car si je dit que position de départ est = à par exemple 40
Et que position de fin est = à 10, sa veut dire quoi ?
Que je recherche depuis la fin vers le début de la chaine mais dans la limite que j’ai prescris
Et que je retourne le résulta de la recherche depuis la fin de la chaine
Compliquer tout sa, moi-même je my per un peut

Bon pour le reste c’est asses explicite je pence
Moi je continue ce que je suis en train de faire mais j’aimerais savoir comment vous feriez vous
Je cherche a faire cette fonction puissante pour mes futur programme ou j’en aurais besoin

merci a vous :lol:
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: LimitedFindString

Message par Le Soldat Inconnu »

Code : Tout sélectionner

Si elle est inférieur a -1 sa veut dire la même chose sauf que la c’est donc rechercher a la fin de la chaine – le supplément, exemple : -5 veut dire a la fin de la chaine – 4
Pour la position de fin, si elle est = à -1, sa veut dire recherche terminer a la fin de la chaine
Tu te compliques la vie.
Si = 0, on va jusqu'à la fin de la phrase
si > 0, on va jusqu'au caractère pointée en partant du début
si < 0, on part de la fin et on retire les caractères
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: LimitedFindString

Message par dayvid »

salut

oui je sais que je me complique la vie mais c'est plus simple comme sa pour moi
je suis du genre a prendre la porte qui est fermer alors que l'autre a coté est ouverte
je suis comme sa moi lol

voila ou j'en suis, ya encore une tonne de boulot et c'est pas encor bien au point
mais je vais y arriver vous pouvez me croire

la c'est du brouillon, quand ce sera bien au point j'éssarais de l'améliorer encore plus
a la fin je ferais une commande très complète ou on pourra tout faire avec les string
et se sera nommer ToolString

on pourra par exemple faire des recherche acenser, extraction acenser, remplacement acenser, etc.

Code : Tout sélectionner

Global ChaineDeRecherche$, ChaineRechercher$, PositionRechercherDepart, PositionRechercherFin, ModeCaseRecherche, RechercherMotEntierSeullement, IgniorerLesCommantaire, IgniorerLesChaine, IgniorerLesAccents, ResultaDeLaRecherche$
Global CopieChaineDeRecherche$, CopieChaineRechercher$, CopieChaineDeRecherche$, BaseDeDonnerExtractionChaine$, TransformationChaineDeRecherche$

Procedure RechercheChaine()
  Repeat
    PositionExtraction + 1
    caractereExtrait$ = Mid(ChaineDeRecherche$, PositionExtraction, 1)
    
    If caractereExtrait$ = Chr(34)
      Chaine + 1
    EndIf
    
    If Chaine = 0
      TransformationChaineDeRecherche$ + caractereExtrait$
    ElseIf Chaine = 1 And caractereExtrait$ = Chr(34)
      PositionDepartChaine = PositionExtraction
      Longueurchaine + 1
    ElseIf Chaine = 2 And caractereExtrait$ = Chr(34)
      Chaine = 0
      Longueurchaine + 1
      PositionFinChaine = PositionExtraction + 1
      ExtractionChaine$ = Mid(ChaineDeRecherche$, PositionDepartChaine, Longueurchaine)
      For x = 1 To Len(ExtractionChaine$) + 2
      TransformationChaineDeRecherche$ = InsertString(TransformationChaineDeRecherche$, Chr(155), Len(TransformationChaineDeRecherche$))
      Next
      Longueurchaine = 0
      LongueurChaineTotale + Len(ExtractionChaine$)
    Else
      Longueurchaine + 1
    EndIf
    
  Until caractereExtrait$ = ""
  
  CopieChaineDeRecherche$ = TransformationChaineDeRecherche$
  
EndProcedure

Procedure RechercheCommantaire()
  
  
  
EndProcedure

Procedure RenplacementAccents()
  
  ChaineDeRecherche$ = ReplaceString(ChaineDeRecherche$, "à", "a", 0, 1)
  ChaineDeRecherche$ = ReplaceString(ChaineDeRecherche$, "ä", "a", 0, 1)
  ChaineDeRecherche$ = ReplaceString(ChaineDeRecherche$, "â", "a", 0, 1)
  
  ChaineDeRecherche$ = ReplaceString(ChaineDeRecherche$, "é", "e", 0, 1)
  ChaineDeRecherche$ = ReplaceString(ChaineDeRecherche$, "è", "e", 0, 1)
  ChaineDeRecherche$ = ReplaceString(ChaineDeRecherche$, "ë", "e", 0, 1)
  ChaineDeRecherche$ = ReplaceString(ChaineDeRecherche$, "ê", "e", 0, 1)
  
  ChaineDeRecherche$ = ReplaceString(ChaineDeRecherche$, "î", "i", 0, 1)
  ChaineDeRecherche$ = ReplaceString(ChaineDeRecherche$, "ï", "i", 0, 1)
  
  ChaineDeRecherche$ = ReplaceString(ChaineDeRecherche$, "ö", "o", 0, 1)
  ChaineDeRecherche$ = ReplaceString(ChaineDeRecherche$, "ô", "o", 0, 1)
  
  ChaineDeRecherche$ = ReplaceString(ChaineDeRecherche$, "û", "u", 0, 1)
  ChaineDeRecherche$ = ReplaceString(ChaineDeRecherche$, "ü", "u", 0, 1)
  
  ChaineDeRecherche$ = ReplaceString(ChaineDeRecherche$, "ÿ", "y", 0, 1)
  
  ChaineRechercher$ = ReplaceString(ChaineRechercher$, "à", "a", 0, 1)
  ChaineRechercher$ = ReplaceString(ChaineRechercher$, "ä", "a", 0, 1)
  ChaineRechercher$ = ReplaceString(ChaineRechercher$, "â", "a", 0, 1)
  
  ChaineRechercher$ = ReplaceString(ChaineRechercher$, "é", "e", 0, 1)
  ChaineRechercher$ = ReplaceString(ChaineRechercher$, "è", "e", 0, 1)
  ChaineRechercher$ = ReplaceString(ChaineRechercher$, "ë", "e", 0, 1)
  ChaineRechercher$ = ReplaceString(ChaineRechercher$, "ê", "e", 0, 1)
  
  ChaineRechercher$ = ReplaceString(ChaineRechercher$, "î", "i", 0, 1)
  ChaineRechercher$ = ReplaceString(ChaineRechercher$, "ï", "i", 0, 1)
  
  ChaineRechercher$ = ReplaceString(ChaineRechercher$, "ö", "o", 0, 1)
  ChaineRechercher$ = ReplaceString(ChaineRechercher$, "ô", "o", 0, 1)
  
  ChaineRechercher$ = ReplaceString(ChaineRechercher$, "û", "u", 0, 1)
  ChaineRechercher$ = ReplaceString(ChaineRechercher$, "ü", "u", 0, 1)
  
  ChaineRechercher$ = ReplaceString(ChaineRechercher$, "ÿ", "y", 0, 1)
  
  CopieChaineDeRecherche$ = ChaineDeRecherche$
  CopieChaineRechercher$ = ChaineRechercher$
  
  EndProcedure

Procedure RetourResulta()
If RechercherMotEntierSeullement = 1 And Val(ResultaDeLaRecherche$) > 0
  ResultaDeLaRecherche + 1
EndIf
    
If Val(ResultaDeLaRecherche$) = 0
  Debug "Aucune correspondance trouvé"
Else
  If PositionRechercherFin < 0
    Debug "Correspondance trouvé à la position: " + Str(Val(ResultaDeLaRecherche$))
  ElseIf PositionRechercherDepart > PositionRechercherFin
    Debug "Correspondance trouvé à la position: " + Str(Val(ResultaDeLaRecherche$))
  ElseIf PositionRechercherDepart < 0
    Debug "Correspondance trouvé à la position: " + Str(Val(ResultaDeLaRecherche$) - 1)
  ElseIf PositionRechercherFin > PositionRechercherDepart
    Debug "Correspondance trouvé à la position: " + Str(Val(ResultaDeLaRecherche$) - 1)
    EndIf
  EndIf
Debug ""
EndProcedure

Procedure.s LimitedFindString(ChaineDeRecherche$, ChaineRechercher$, PositionRechercherDepart, PositionRechercherFin, ModeCaseRecherche, RechercherMotEntierSeullement, IgniorerLesCommantaire, IgniorerLesChaine, IgniorerLesAccents)
  
  LongueurChaineDeRecherche = Len(ChaineDeRecherche$)
  LongueurChaineRechercher = Len(ChaineRechercher$)
  
  If IgniorerLesAccents < 0
    IgniorerLesAccents = 0
  ElseIf IgniorerLesAccents > 1
    IgniorerLesAccents = 1
    RenplacementAccents()
  ElseIf IgniorerLesAccents = 1
    RenplacementAccents()
    EndIf
    
    If IgniorerLesChaine < 0
      IgniorerLesChaine = 0
    ElseIf IgniorerLesChaine = 0
      
  ElseIf IgniorerLesChaine > 1
    IgniorerLesChaine = 1
    RechercheChaine()
    ChaineDeRecherche$ = CopieChaineDeRecherche$
  ElseIf IgniorerLesChaine = 1
    RechercheChaine()
    ChaineDeRecherche$ = CopieChaineDeRecherche$
    EndIf
    
    If CopieChaineDeRecherche$ > ""
      ChaineDeRecherche$ = CopieChaineDeRecherche$
    EndIf
    
    If CopieChaineRechercher$ > ""
      ChaineRechercher$ = CopieChaineRechercher$
      EndIf
    
  If ModeCaseRecherche < 0
    ModeCaseRecherche = 0
  ElseIf ModeCaseRecherche = 0
    ChaineDeRecherche$ = LCase(ChaineDeRecherche$)
    ChaineRechercher$ = LCase(ChaineRechercher$)
  ElseIf ModeCaseRecherche = 1
    
  ElseIf ModeCaseRecherche > 1
    ModeCaseRecherche = 1
    EndIf
    
    If RechercherMotEntierSeullement < 0
      RechercherMotEntierSeullement = 0
    ElseIf RechercherMotEntierSeullement = 1
      ChaineRechercher$ = " " + ChaineRechercher$ + " "
    ElseIf RechercherMotEntierSeullement > 1
      RechercherMotEntierSeullement = 1
      ChaineRechercher$ = " " + ChaineRechercher$ + " "
    EndIf
    
  If ChaineDeRecherche$ = "" And ChaineRechercher$ = ""
    ProcedureReturn "-1"
  ElseIf ChaineDeRecherche$ = "" And ChaineRechercher$ > ""
    ProcedureReturn "-2"
  ElseIf ChaineDeRecherche$ > "" And ChaineRechercher$ = ""
    ProcedureReturn "-3"
  EndIf
  
  If PositionRechercherDepart = 0
    PositionRechercherDepart = 1
    
  ElseIf PositionRechercherDepart > 0
    
  ElseIf PositionRechercherDepart = -1
    PositionRechercherDepart = LongueurChaineDeRecherche
    
  ElseIf PositionRechercherDepart < -1
    PositionRechercherDepart = LongueurChaineDeRecherche + PositionRechercherDepart + 1
    
  ElseIf PositionRechercherDepart > LongueurChaineDeRecherche
    PositionRechercherDepart = LongueurChaineDeRecherche
    
  EndIf
  
  If PositionRechercherFin = 0
    PositionRechercherFin = 1
    
  ElseIf PositionRechercherFin = -1
    PositionRechercherFin = LongueurChaineDeRecherche
    
  ElseIf PositionRechercherFin < -1
    PositionRechercherFin = LongueurChaineDeRecherche + PositionRechercherFin + 1
    
  ElseIf PositionRechercherFin > LongueurChaineDeRecherche
    PositionRechercherFin = LongueurChaineDeRecherche
    
  EndIf
  
  If PositionRechercherDepart > PositionRechercherFin ; ont recherche depuis la fin de la chaine vers le début
    For ExtractionChaineRecherche = PositionRechercherDepart To PositionRechercherFin Step -1
      ExtractionCaractere$ = Mid(ChaineDeRecherche$, ExtractionChaineRecherche, 1)
      ExtractionChaineRecherche$ + ExtractionCaracteres$
      LongueurExtractionChaineRecherche = Len(ExtractionChaineRecherche$)
      
      If ExtractionChaineRecherche$ = ""
        ExtractionChaineRecherche$ = " "
      EndIf
      
      ExtractionChaineRecherche$ = InsertString(ExtractionChaineRecherche$, ExtractionCaractere$, 1)
      ResultaRechercheFindString = FindString(ExtractionChaineRecherche$, ChaineRechercher$, 1)
      
      If Val(ResultaDeLaRecherche$) > 0
        ProcedureReturn Str(LongueurChaineDeRecherche - PositionRechercherDepart + LongueurExtractionChaineRecherche)
      EndIf
      
    Next
    
    ProcedureReturn "0"
    
  ElseIf PositionRechercherFin > PositionRechercherDepart ; ont recherche depuis le début de la chaine vers la fin
    
    For ExtractionChaineRecherche = 1 To PositionRechercherFin Step 1
      ExtractionCaractere$ = Mid(ChaineDeRecherche$, ExtractionChaineRecherche, 1)
      ExtractionChaineRecherche$ + ExtractionCaractere$
      
      ResultaRechercheFindString = FindString(ExtractionChaineRecherche$, ChaineRechercher$, 1)
      
      If ResultaRechercheFindString > 0
        ProcedureReturn Str(ResultaRechercheFindString)
      EndIf
      
    Next
    
    ProcedureReturn "0"
    
  ElseIf PositionRechercherDepart = PositionRechercherFin ; ceci n'est pas possible
    ProcedureReturn "0"
    EndIf
    
EndProcedure

ChaineDeRecherche$ = "il étais une fois " + Chr(34) + "dans un très grand village" + Chr(34) + ", un tout petit garçon qui ce nommais " + Chr(34) + "Arthure" + Chr(34) + ", ce petit garçon un étais vraiment " + Chr(34) + "très petit" + Chr(34) + "mais aussie vraiment très " + Chr(34) + "intéligent" + Chr(34) + "et très " + Chr(34) + "abhile" + Chr(34) + "de ces deux mains"
ChaineRechercher$ = "un"
PositionRechercherDepart = 1
PositionRechercherFin = 53
ModeCaseRecherche = 0
RechercherMotEntierSeullement = 1
IgniorerLesCommantaire = 0
IgniorerLesChaine = 1
IgniorerLesAccents = 0

Debug ChaineDeRecherche$

ResultaDeLaRecherche$ = LimitedFindString(ChaineDeRecherche$, ChaineRechercher$, PositionRechercherDepart, PositionRechercherFin, ModeCaseRecherche, RechercherMotEntierSeullement, IgniorerLesCommantaire, IgniorerLesChaine, IgniorerLesAccents)
RetourResulta()

enlevez RetourResulta() pour avoir seullement la position de la recherche

a oui aussi je ne comprend pas une chose
mes variable que j’ai besoin sont global et pourtant certain résulta ne s’effectue pas dans les variables, c’est pour sa que je suis obliger de copier le résulta dans une autre variable et de réaffecté le résulta de cette variable a la première variable, je ne comprend rien
globale veut bien dire accessible depuis n’importe ou et quand une variable est modifier et bien sont résulta est modifier et enregistrer mais la non, j’en per mon latin moi a force

aller a plus les gars :D
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: LimitedFindString

Message par Le Soldat Inconnu »

pour remplacer les accents, essai

LCase(UCase(éèê))
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Répondre