Extraire un ou plusieurs Mot (conditionnel)

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)

Extraire un ou plusieurs Mot (conditionnel)

Message 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  ")
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
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Extraire un ou plusieurs Mot (conditionnel)

Message 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  ")
Avatar de l’utilisateur
venom
Messages : 3166
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Extraire un ou plusieurs Mot (conditionnel)

Message par venom »

:lol: oui j'allais le dire StringField() le fait très bien nativement :wink:






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Extraire un ou plusieurs Mot (conditionnel)

Message 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!
Avatar de l’utilisateur
venom
Messages : 3166
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Extraire un ou plusieurs Mot (conditionnel)

Message 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.






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Kwai chang caine
Messages : 6992
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Extraire un ou plusieurs Mot (conditionnel)

Message 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:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Extraire un ou plusieurs Mot (conditionnel)

Message 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
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
Mindphazer
Messages : 707
Inscription : mer. 24/août/2005 10:42

Re: Extraire un ou plusieurs Mot (conditionnel)

Message 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......
Bureau : Win11 64bits
Maison : Macbook Pro M4 16" SSD 512 Go / Ram 24 Go - iPad Air 128 Go (pour madame) - iPhone 17 Pro Max 256 Go
Avatar de l’utilisateur
Kwai chang caine
Messages : 6992
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Extraire un ou plusieurs Mot (conditionnel)

Message 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:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Re: Extraire un ou plusieurs Mot (conditionnel)

Message 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 .....
Jbernard13
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Extraire un ou plusieurs Mot (conditionnel)

Message 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 :|
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
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Extraire un ou plusieurs Mot (conditionnel)

Message 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:
Avatar de l’utilisateur
Mindphazer
Messages : 707
Inscription : mer. 24/août/2005 10:42

Re: Extraire un ou plusieurs Mot (conditionnel)

Message 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:
Bureau : Win11 64bits
Maison : Macbook Pro M4 16" SSD 512 Go / Ram 24 Go - iPad Air 128 Go (pour madame) - iPhone 17 Pro Max 256 Go
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Extraire un ou plusieurs Mot (conditionnel)

Message par dayvid »

Toujours aussi chapardeur vous hein :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 : 5025
Inscription : mer. 09/nov./2005 9:53

Re: Extraire un ou plusieurs Mot (conditionnel)

Message par SPH »

dayvid a écrit :Toujours aussi chapardeur vous hein :lol:
Chapardeur<>taquineur

!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
Répondre