Page 1 sur 2

Extraire un ou plusieurs Mot (conditionnel)

Publié : mar. 03/mai/2011 12:55
par dayvid
Salut a tous, je vous propose un petit code non optimiser pour extraire
un ou plusieurs mots suivent les divers paramètre conditionnel
dite-moi ce que vous en pensez, je pense que c’est loin d’être optimiser
mais c’est je pense mieux que rien

Code : Tout sélectionner

Procedure.s ExtraireMot(Chaine$, PositionDepart = 1, CaractereDepart$ = "", ModPosExtCarDep = 0, Positionfin = 0, CaractereFin$ = "", ModPosExtCarFin = 0, RespecterCase = 0, TerSiNomCar = -1, TerSiNomMot = -1, TerSiNomCarIde = -1, CarIde$ = "")
  
  ; bien, comment sa marche ?!:
  
  ; Chaine$ est la chaine de caractère
  
  ; PositionDepart est position de recherche de départ (igniorer si CaractereDepart$ est > "")
  
  ; CaractereDepart$, définie la position de départ automatiquement en recherchent les caractères CaractereDepart$
  
  ; ModPosExtCarDep est un ajustement de la position de départ d'éxtraction
  ; par exemple si CaractereDepart$ = [ et bien ce caractère sera pris en compte dans cette recherche car
  ; ont commence l'éxtraction a partir de ce cacartère la, mais grace a cette variable ModPosExtCarDep
  ; ont peut ajuster la position d'éxtraction de départ, exemple: '1' = + 1, '-1' = -1, etc.
  
  ; Positionfin est pareil que pour PositionDepart, sauf que la des qu'on atteint cette position, on stop l'éxtraction (igniorer si CaractereFin$ est > "")
  
  ; CaractereFin$ est pareil que pour CaractereDepart$ a la différence que ici ont définie la position de fin automatiquement en recherchent les caractères CaractereFin$
  
  ; ModPosExtCarFin est pareil que ModPosExtCarDep sauf que ici ont ajuste la position de fin d'extraction
  
  ; RespecterCase est pour réspécter la case, recherchera éxactement les caractères donner dans la chaine, 0 = prend pas en compte la case, 1 = prend en compte la case
  
  ; TerSiNomMot est pour détèrminer l'extraction a partire du momment ou ont as éxtrait le nombre de mots voulue, ce paramètre prends parfois le dessue sur:
  ; Positionfin, CaractereFin$, ModPosExtCarFin
  ; prend le dessue si: Positionfin et CaractereFin$ n'ont pas été atteint et trouvé
  
  ; TerSiNomCar est pour détèrminer l'extraction a partire du momment ou ont as éxtrait le nombre de caractere voulue, ce paramètre prends parfois le dessue sur:
  ; Positionfin, CaractereFin$, ModPosExtCarFin, TerSiNomMot
  ; prend le dessue si: Positionfin et CaractereFin$ n'ont pas été atteint et trouvé et si TerSiNomMot n'as pas été atteind
  
  ; TerSiNomCarIde est pour stoper l'extraction quand le nombre de caractère identique a atteind un certain nombre, ce paramètre commence a partire de 2
  ; a utiliser conjointement avec Caractere$ qui définie le caractère en question
  ; si ses paramètre sont corecte alors ModPosExtCarDep et ModPosExtCarFin seron mis automatiquement à 0
  ; d'ailleur il est égallement a noté que le dernier caractère identique ne sera pas pris en compte dans la chaine
  
  ChaineSauvagarde$ = Chaine$
  
  If TerSiNomCar < -1
    TerSiNomCar = -1 ; = extrait tous les caracteres
  ElseIf TerSiNomCar = 0
    TerSiNomCar = -1
  EndIf
  
  If TerSiNomMot < -1
    TerSiNomMot = -1 ; = extrait tous les mots
  ElseIf TerSiNomMot = 0
    TerSiNomMot = -1
  EndIf
  
  If TerSiNomCarIde < -1
    TerSiNomCarIde = -1 ; = extrait tous les mots
  ElseIf TerSiNomCarIde = 0
    TerSiNomCarIde = -1
  ElseIf TerSiNomCarIde = 1
    TerSiNomCarIde = -1
  EndIf
  
  If TerSiNomCarIde > CountString(Chaine$, CarIde$)
    TerSiNomCarIde = CountString(Chaine$, CarIde$)
  EndIf
  
  If TerSiNomCarIde > 1 And CarIde$ > ""
    ModPosExtCarDep = 0
    ModPosExtCarFin = 0
  EndIf
  
  If PositionDepart = -1 Or PositionDepart > Len(Chaine$)
    PositionDepart = Len(Chaine$)
  ElseIf PositionDepart < -1
    PositionDepart = -1
  ElseIf PositionDepart = 0
    PositionDepart = 1
  EndIf
  
  If Positionfin = -1 Or Positionfin > Len(Chaine$)
    Positionfin = Len(Chaine$)
  ElseIf Positionfin < -1
    Positionfin = -1
  EndIf
  
  If RespecterCase <= 0
    RespecterCase = 0
  ElseIf RespecterCase > 1
    RespecterCase = 1
  EndIf
  
  If RespecterCase = 0 ; on ne respecte pas la case, 1 on respecte la case
    Chaine$ = LCase(Chaine$)
    CaractereDepart$ = LCase(CaractereDepart$)
    CaractereFin$ = LCase(CaractereFin$)
  EndIf
  
  If CaractereDepart$ > ""
    PositionDepart = FindString(Chaine$, CaractereDepart$, 1)
    If PositionDepart > 0
      PositionDepart - 1
    ElseIf PositionDepart = 0
      ProcedureReturn ""
    EndIf
  EndIf
  
  If CaractereFin$ > ""
    Chaine$ = Mid(ChaineSauvagarde$, 1)
    Positionfin = FindString(Chaine$, CaractereFin$, 1)
    If Positionfin > 0
      Positionfin + Len(CaractereFin$)
    ElseIf Positionfin = 0
      Positionfin = Len(Chaine$)
    EndIf
  EndIf
  
  PositionDepart + ModPosExtCarDep
  Positionfin + ModPosExtCarFin
  
  PositionExtraction = PositionDepart - 1
  Chaine$ = ChaineSauvagarde$
  
  Repeat
    Repeat
      
      PositionExtraction + 1
      caractere$ = Mid(Chaine$, PositionExtraction, 1)
      BufferCarIde$ = Mid(Chaine$, PositionExtraction, Len(CarIde$))
      
      If CarIde$ > "" And BufferCarIde$ = CarIde$
        CaractereIdentique + 1
      EndIf
      
      If TerSiNomCarIde > 0 And CaractereIdentique = TerSiNomCarIde
        Terminer = 1
      EndIf
      
      If TerSiNomCar <> -1 And TerSiNomCar = nombre_de_caractere
        Break
      EndIf
      
      If NombreMot <> -1 And NombreMot = TerSiNomMot
        Terminer = 1
      EndIf
      
      If Positionfin <> 0
        If PositionExtraction => Positionfin
          Break
        EndIf
      EndIf
      
      If caractere$ = " " And Mot$ = ""
        nombre_de_caractere + 1
        Continue
        
      ElseIf caractere$ <> "" And caractere$ <> " "
        Mot$ = Mot$ + caractere$  ; ont enregistre le caractère
        nombre_de_caractere + 1
        Continue
        
      ElseIf caractere$ = " " And Mot$ > " " 
        nombre_de_caractere + 1
        Break  ; ont quitte la boucle car l'éxtraction du Mot$ clée est tèrminer
        
      ElseIf caractere$ = "" And Mot$ > " "
        nombre_de_caractere + 1
        Break  ; ont quitte aussie la boucle car l'éxtraction du Mot$ clée est tèrminer
        
      ElseIf caractere$ = "" And Mot$ = ""
        Break  ; ont quitte la boucle car ya rien
        
      EndIf
      
    ForEver
    
    If Mot$ > ""
      ChaineMot$ + Mot$ + "|"
      NombreMot + 1
      Mot$ = ""
    EndIf
    
    If Terminer = 1
      ChaineMot$ = Mid(ChaineMot$, 1, Len(ChaineMot$) - 2)
      ChaineMot$ + "|"
      Break
    EndIf
    
  Until PositionExtraction => Len(Chaine$)
  
  ProcedureReturn ChaineMot$
EndProcedure

Debug ExtraireMot("  Le:  tigre:  à:  [L'éléphant est gris] rouge  ", 0, "", 0, 0, "", 0, 0, 0, 0, 2, ":")
Je vous propose égallement une procedure pour extraire seullement le premier mot

Code : Tout sélectionner

Procedure.s ExtrairePremierMot(Chaine$)
Repeat
    
    PositionExtraction + 1
    caractere$ = Mid(Chaine$, PositionExtraction, 1)
    
    If caractere$ = " " And Mot$ = ""
      nombre_de_caractere + 1
      Continue
      
    ElseIf caractere$ <> "" And caractere$ <> " "
      Mot$ = Mot$ + caractere$  ; ont enregistre le caractère
      nombre_de_caractere + 1
      Continue
      
    ElseIf caractere$ = " " And Mot$ > " " 
      nombre_de_caractere + 1
      Break  ; ont quitte la boucle car l'éxtraction du Mot$ clée est tèrminer
      
    ElseIf caractere$ = "" And Mot$ > " "
      nombre_de_caractere + 1
      Break  ; ont quitte aussie la boucle car l'éxtraction du Mot$ clée est tèrminer
      
    ElseIf caractere$ = "" And Mot$ = ""
      Break  ; ont quitte la boucle car ya rien
      
    EndIf
    
  ForEver
  ProcedureReturn Mot$
EndProcedure

Debug ExtrairePremierMot("  Le  tigre  rouge  ")

Re: Extraire un ou plusieurs Mot (conditionnel)

Publié : mar. 03/mai/2011 17:38
par Chris
Procedure.s ExtrairePremierMot(Chaine$)
Repeat

PositionExtraction + 1
caractere$ = Mid(Chaine$, PositionExtraction, 1)

If caractere$ = " " And Mot$ = ""
nombre_de_caractere + 1
Continue

ElseIf caractere$ <> "" And caractere$ <> " "
Mot$ = Mot$ + caractere$ ; ont enregistre le caractère
nombre_de_caractere + 1
Continue

ElseIf caractere$ = " " And Mot$ > " "
nombre_de_caractere + 1
Break ; ont quitte la boucle car l'éxtraction du Mot$ clée est tèrminer

ElseIf caractere$ = "" And Mot$ > " "
nombre_de_caractere + 1
Break ; ont quitte aussie la boucle car l'éxtraction du Mot$ clée est tèrminer

ElseIf caractere$ = "" And Mot$ = ""
Break ; ont quitte la boucle car ya rien

EndIf

ForEver
ProcedureReturn Mot$
EndProcedure

Debug ExtrairePremierMot(" Le tigre rouge ")
Tout ça, pour obtenir la même chose que ça: 8O

Code : Tout sélectionner

Procedure.s ExtrairePremierMot(Chaine$)
  ProcedureReturn StringField(Trim(Chaine$), 1, " ")
EndProcedure

Debug ExtrairePremierMot("  Le  tigre  rouge  ")

Re: Extraire un ou plusieurs Mot (conditionnel)

Publié : mar. 03/mai/2011 17:51
par venom
:lol: oui j'allais le dire StringField() le fait très bien nativement :wink:






@++

Re: Extraire un ou plusieurs Mot (conditionnel)

Publié : mar. 03/mai/2011 19:13
par djes
Bah, il s'amuse, il teste, c'est comme ça qu'on apprend le mieux. En plus j'ai l'impression qu'il y prend pas mal de plaisir!

Re: Extraire un ou plusieurs Mot (conditionnel)

Publié : mar. 03/mai/2011 21:23
par venom
djes a écrit :Bah, il s'amuse, il teste, c'est comme ça qu'on apprend le mieux. En plus j'ai l'impression qu'il y prend pas mal de plaisir!
Je ne dit pas le contraire. c'est clair que c'est la meilleur façon d’apprendre, mais ce qui est bon ici c'est qu'avec un tas de code différant ont arrive au même résultat.






@++

Re: Extraire un ou plusieurs Mot (conditionnel)

Publié : mer. 04/mai/2011 18:07
par Kwai chang caine
djes a écrit :Bah, il s'amuse, il teste, c'est comme ça qu'on apprend le mieux. En plus j'ai l'impression qu'il y prend pas mal de plaisir!
Tout à fait d'accord 8)
C'est surement un des plus "productif" du forum 8) en ligne de code :mrgreen:

En tout cas ça fait plaisir un mec qui se defonce comme ça.
Le resultat importe peu a certains niveaux, juste la bonne volonté compte
Dayvid ne code pas pour un client... :roll:
Et puis c'est un bon moyen pour tester la rapidité de PB, si avec "Wattmille" lignes de trop ça marche quand meme...c'est que FRED a pas trop mal fait son boulot :D
Au final...meme avec un code de Dayvid..l'ASM sera toujours plus rapide qu'avec le compilo de VB6 et son armée de programmeurs professionnels :lol:

Et c'est en codant qu'on deviens "Coderons"....donc vas y Dayvid code :wink:

Re: Extraire un ou plusieurs Mot (conditionnel)

Publié : ven. 06/mai/2011 13:36
par dayvid
Hum vous n'avez peut être pas bien compris ce que je voulais faire :lol:
D'ailleurs a propos de Visual basic, j'y suis passer :P

il offre beaucoup plus de chose notamment pour personnaliser les gadgets car avec pure basic
sa me casse les ...... j'en est raz le bol de passer par c'est foutue API de .....

Au moins avec visual Basic tous est personnalisable a volonté et pas besoin de 50 000 ligne de code d’api a la mormoile-neux pour personnaliser un gadget, voilà c’est ce qui manque cruellement a pure basic

Re: Extraire un ou plusieurs Mot (conditionnel)

Publié : ven. 06/mai/2011 14:39
par Mindphazer
dayvid a écrit : Au moins avec visual Basic tous est personnalisable a volonté et pas besoin de 50 000 ligne de code d’api a la mormoile-neux pour personnaliser un gadget, voilà c’est ce qui manque cruellement a pure basic
Ouais.
Mais le moindre programme VB (même 3 lignes) compilé pèse quelques Mo..... Et pis, si t'as pas les DLL qui vont bien, il tournera pas......

Re: Extraire un ou plusieurs Mot (conditionnel)

Publié : ven. 06/mai/2011 14:40
par Kwai chang caine
Attend un peu.....quand tu en auras fait un peu plus du VB, tu pourras revenir nous voir :lol:

C'est peut etre mieux dans certains cas, mais y'a une tonne de choses qui vont te le mordre le noeud comme tu le dis :mrgreen:

Et pour ce qui est des API....faut pas croire qu'en VB tu peux t'en passer
Selon ce que tu codes, tu sera obligé....et la ...j'me marre deja pour les declarations, les BYVAL, BYREF et tout le toutim qui font que VB y converti en route les type de données...et meme l'ANSI et L'UNICODE....un vrai plaisir

Et j'te passe les variables BSTR, et aussi la gestion des tableaux SaffeArray et l'envoi d'un pointeur de pointeur de tableau à une DLL (J'savais meme pas que c'etait possible 8O ), j'm'en tripote encore :mrgreen:

Y parait qu'en Dot.net ça va mieux...la je connais pas :roll:

Re: Extraire un ou plusieurs Mot (conditionnel)

Publié : ven. 06/mai/2011 17:59
par jbernard13
Kwai chang caine a écrit :Attend un peu.....quand tu en auras fait un peu plus du VB, tu pourras revenir nous voir :lol:
je suis d'accord avec Toi KCC , dayvid va vite revenir au bercail .....

Re: Extraire un ou plusieurs Mot (conditionnel)

Publié : lun. 09/mai/2011 15:34
par dayvid
Ouain snif :cry:

C'est trop dur :cry:

Nan j'rigole, je suis trop occuper pour perdre mon précieux temps avec VB pour le momment

Nan peche que si je vous quitais et bien beaucoup serais ravi hein :|

Re: Extraire un ou plusieurs Mot (conditionnel)

Publié : lun. 09/mai/2011 18:44
par Chris
dayvid a écrit :Ouain snif :cry:

C'est trop dur :cry:

Nan j'rigole, je suis trop occuper pour perdre mon précieux temps avec VB pour le momment

Nan peche que si je vous quitais et bien beaucoup serais ravi hein :|
Noooon! C'est pas à ce point là quand même! :roll:

mais bon... sûrement qu'y aurait pas non plus beaucoup de monde pour te courir après, hein :mrgreen:

Re: Extraire un ou plusieurs Mot (conditionnel)

Publié : lun. 09/mai/2011 19:11
par Mindphazer
dayvid a écrit : Nan peche que si je vous quitais et bien beaucoup serais ravi hein :|
Mais nan....
On perdrait tout tes codes dont on cherche encore l'intérêt, ainsi que tes explications qu'on cherche encore à comprendre...... :mrgreen:

Re: Extraire un ou plusieurs Mot (conditionnel)

Publié : jeu. 12/mai/2011 15:09
par dayvid
Toujours aussi chapardeur vous hein :lol:

Re: Extraire un ou plusieurs Mot (conditionnel)

Publié : jeu. 12/mai/2011 15:34
par SPH
dayvid a écrit :Toujours aussi chapardeur vous hein :lol:
Chapardeur<>taquineur