Dans un texte supprimer les éventuels doubles espaces

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Dans un texte supprimer les éventuels doubles espaces

Message par MLD »

Bonjour a tous sur le fofo us quelqu’un a posé cette question "Dans un texte supprimer les éventuels doubles espaces".
Les réponses pour résoudre le problème me laisse perplexe, ou je n'est rien compris :roll: allez voir.
Pour ma part et pour le fun je propose ceci:

Code : Tout sélectionner

;MLD le 10/9/2022
;Dans un texte supprimer les éventuels doubles espaces
a$ = "Un nombre flottant  est stocké de telle manière que la 'virgule flotte' autour de la partie réelle. De la sorte, "
b$ = "il est possible d'avoir des nombres dont la valeur peut être aussi bien grande que petite. Toutefois vous ne pouvez pas stocker"
c$ =" de grands nombres  avec une précision aussi élevée que des petits   nombres." 
L$ = a$ + b$ + c$

Procedure.s SS(L$)
max = Len(L$)
For x =1 To max
  If Asc(Mid(L$,x,1)) = 32 
    If Asc(Mid(L$,x+1,1)) = 32
      x=x+1
    EndIf
  EndIf
  LL$ = LL$ + Mid(L$,x,1) 
Next
ProcedureReturn LL$
EndProcedure
LL$ = SS(L$)

Debug L$

Debug LL$

Quelqu’un a t'il un code plus court ou plus rapide :?:
chez nos amis des USA il y a d'autre codes de manipulation de texte qui sont surprenant/ nous verrons cela plus tard.
Amusez vous bien
bon WE
Dernière modification par MLD le dim. 11/sept./2022 12:31, modifié 1 fois.
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Dans un texte supprimer les éventuels doubles espaces

Message par Micoute »

j'ai fait une procédure analogue quand j'étais plus jeune, ce n'est pas sûr qu'elle soit plus courte.

Code : Tout sélectionner

Procedure.s SupprimerEspaces(Chaine.s, separateur.s) ; - supprime les espaces superflus
  Protected Caractere.a = 0
  Protected Remplissage.a = 0
  Protected Sortie.s, i.i
  
  For i = 1 To Len(Chaine)
    Caractere = Asc(Mid(Chaine,i,1))
    If Caractere <> 32
      Remplissage = 1 
      Sortie + Chr(Caractere)  
    EndIf 
    
    If Caractere = 32 And Remplissage = 1
      Remplissage = 0
      Sortie + separateur
    EndIf 
  Next   
  ProcedureReturn Sortie
EndProcedure
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Dans un texte supprimer les éventuels doubles espaces

Message par case »

je propose une modification a ton code mld.

Code : Tout sélectionner

;MLD le 10/9/2022
;Dans un texte supprimer les éventuels doubles espaces
a$ = "Un nombre flottant  est stocké de telle manière que la 'virgule flotte' autour de la partie réelle. De la sorte, "
b$ = "il est possible d'avoir des nombres dont la valeur peut être aussi bien grande que petite. Toutefois vous ne pouvez pas stocker"
c$ =" de grands nombres       avec une précision aussi élevée que des petits   nombres."   ; ajout de plusieurs espaces ne fonctionne pas avec ton code
L$ = a$ + b$ + c$

Procedure.s SS(L$)
max = Len(L$)
Debug max
For x =1 To max
  If Asc(Mid(L$,x,1)) = 32 
    While Asc(Mid(L$,x+1,1)) = 32     ; ma modification: tant qu'il y a un espace a la position x
      x=x+1					      ; x+1
    Wend                                          ; permet de 'sauter plusieurs espace a la suite car dans ton exemple seul 1 espace est teste.
  EndIf
  LL$ = LL$ + Mid(L$,x,1) 
Next
ProcedureReturn LL$
EndProcedure
LL$ = SS(L$)

Debug L$

Debug LL$
ImageImage
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Dans un texte supprimer les éventuels doubles espaces

Message par Ar-S »

J'ai tenté une approche avec les regex.
Si la détection est aisée, je ne pige pas pourquoi le replacestring ne fait pas le boulot.

Code : Tout sélectionner

Structure plop
    name.s
    pos.i
    lon.i
EndStructure

Global NewList cible.plop()

a$ = "Un nombre flottant  est stocké de telle manière que la 'virgule flotte' autour de la partie réelle. De la sorte, "
b$ = "il est possible d'avoir des nombres dont la valeur peut être aussi bien grande que petite. Toutefois vous ne pouvez pas stocker"
c$ =" de grands nombres       avec une précision aussi élevée que des petits   nombres."
String$ = a$ + b$ + c$
p$ = "[ ]{2,}" ; 2 espaces ou plus
Debug  String$

CreateRegularExpression(0,p$)
If ExamineRegularExpression(0, string$)
    While NextRegularExpressionMatch(0)
        AddElement(cible())
        cible()\name = RegularExpressionMatchString(0)
        cible()\pos = RegularExpressionMatchPosition(0)
        cible()\lon = RegularExpressionMatchLength(0)
        Debug "*"+cible()\name+"* <-- espaces multiples : position : " + Str(cible()\pos)+ "  longueur : " + Str(cible()\lon)
        count+1
    Wend
EndIf
Debug Str(count)+" trouvées"

ForEach cible()
    String$ = ReplaceString(String$,cible()\name,Chr(32),#PB_String_NoCase,0)
Next

Debug String$
~~~~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
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Dans un texte supprimer les éventuels doubles espaces

Message par Marc56 »

[...] "Dans un texte supprimer les éventuels doubles espaces". [...]

Code : Tout sélectionner

A$ = "Un nombre flottant  est stocké de telle manière que la 'virgule flotte' autour de la partie réelle. De la sorte, " + 
     "il est possible d'avoir des nombres dont la valeur peut être aussi bien grande que petite. Toutefois vous ne pouvez pas stocker" +
     " de grands nombres       avec une précision aussi élevée que des petits   nombres."

If CreateRegularExpression(0, "\h{2,}")
    Debug ReplaceRegularExpression(0, A$, " ")
Else
    Debug RegularExpressionError()
EndIf
:wink:
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Dans un texte supprimer les éventuels doubles espaces

Message par GallyHC »

Code : Tout sélectionner

text.s = "Un nombre flottant  est stocké de telle manière que la 'virgule flotte' autour de la partie réelle. De la sorte, " + 
       "il est possible d'avoir des nombres dont la valeur peut être aussi bien grande que petite. Toutefois vous ne pouvez pas stocker" +
       " de grands nombres       avec une précision aussi élevée que des petits   nombres."

text = Trim(text)
While CountString(text, "  ") > 0
  text = ReplaceString(text, "  ", " ")
Wend

Debug text
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Dans un texte supprimer les éventuels doubles espaces

Message par MLD »

@ Merci a tous
Que de choses intéressantes. Nos amis qui sont sur le fofo US devraient venir nous voir plus souvent.
@case: Pourquoi pas, mais il y a deux boucles :lol:
@Ar-S et Marc56: Incontestablement c'est le code le plus court Je ne sait pas ce que cela donne en temps. :lol: :roll:
@Gally : J'ai pensé aussi a ReplaceString, mais je crains que cette fonction soit assez mangeuse de temps. :lol:
@Micoute: Tu as le code le plus long. :lol:
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Dans un texte supprimer les éventuels doubles espaces

Message par TazNormand »

Salut

J'ai copié tous vos codes en un seul pour voir les temps de chacun.

Alors soit j'ai fait une boulette sur la partie de GallyHC, soit les fonction de PB sont super optimisées car c'est le sien qui obtient le meilleur temps

Pour que les temps soient un peu plus parlant, j'ai dupliqué plein de fois le texte et voici les temps dans l'ordre du code :

Code : Tout sélectionner

MLD      : 1854 ms
Micoute  : 2046 ms
Case     : 1818 ms
Ar-S     :  119 ms
Marc56   :   11 ms
GallyHc  :    1 ms
Si je me suis trompé sur le code de GallyHC, il est clair que les RegEx sont puissantes, tant qu'on les maîtrise comme Marc56, sinon, y' pas photo ===> fonction de PB à utiliser en 1er

Bon dimanche à tous

Code : Tout sélectionner

;MLD le 10/9/2022
;Dans un texte supprimer les éventuels doubles espaces
a$ = "Un nombre flottant  est stocké de telle manière que la 'virgule flotte' autour de la partie réelle. De la sorte, "
b$ = "il est possible d'avoir des nombres dont la valeur peut être aussi bien grande que petite. Toutefois vous ne pouvez pas stocker"
c$ =" de grands nombres  avec une précision aussi élevée que des petits   nombres." 
L$ = a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$

Procedure.s SS(L$)
max = Len(L$)
For x =1 To max
  If Asc(Mid(L$,x,1)) = 32 
    If Asc(Mid(L$,x+1,1)) = 32
      x=x+1
    EndIf
  EndIf
  LL$ = LL$ + Mid(L$,x,1) 
Next
ProcedureReturn LL$
EndProcedure
t0.f=ElapsedMilliseconds()
LL$ = SS(L$)
t1.f=ElapsedMilliseconds()
Debug L$
Debug LL$
t2.f=t1-t0
Debug "MLD Time : " + t2

Debug "=========================================================================="


; Micoute

Procedure.s SupprimerEspaces(Chaine.s, separateur.s) ; - supprime les espaces superflus
  Protected Caractere.a = 0
  Protected Remplissage.a = 0
  Protected Sortie.s, i.i
  
  For i = 1 To Len(Chaine)
    Caractere = Asc(Mid(Chaine,i,1))
    If Caractere <> 32
      Remplissage = 1 
      Sortie + Chr(Caractere)  
    EndIf 
    
    If Caractere = 32 And Remplissage = 1
      Remplissage = 0
      Sortie + separateur
    EndIf 
  Next   
  ProcedureReturn Sortie
EndProcedure
t0=ElapsedMilliseconds()
LL$=SupprimerEspaces(L$," ")
t1=ElapsedMilliseconds()
t2=t1-t0
Debug L$
Debug LL$
Debug "Micoute Time : " + t2


Debug "=========================================================================="

; Case

Procedure.s SS2(L$)
max = Len(L$)
Debug max
For x =1 To max
  If Asc(Mid(L$,x,1)) = 32 
    While Asc(Mid(L$,x+1,1)) = 32     ; ma modification: tant qu'il y a un espace a la position x
      x=x+1					      ; x+1
    Wend                                          ; permet de 'sauter plusieurs espace a la suite car dans ton exemple seul 1 espace est teste.
  EndIf
  LL$ = LL$ + Mid(L$,x,1) 
Next
ProcedureReturn LL$
EndProcedure
t0=ElapsedMilliseconds()
LL$ = SS2(L$)
t1=ElapsedMilliseconds()
t2=t1-t0
Debug L$
Debug LL$
Debug "Case Time : " +t2

Debug "=========================================================================="

; Ar-S

Structure plop
    name.s
    pos.i
    lon.i
EndStructure

Global NewList cible.plop()

String$ = L$
p$ = "[ ]{2,}" ; 2 espaces ou plus
Debug  String$
t0=ElapsedMilliseconds()
CreateRegularExpression(0,p$)
If ExamineRegularExpression(0, string$)
    While NextRegularExpressionMatch(0)
        AddElement(cible())
        cible()\name = RegularExpressionMatchString(0)
        cible()\pos = RegularExpressionMatchPosition(0)
        cible()\lon = RegularExpressionMatchLength(0)
        ;Debug "*"+cible()\name+"* <-- espaces multiples : position : " + Str(cible()\pos)+ "  longueur : " + Str(cible()\lon)
        count+1
    Wend
EndIf
Debug Str(count)+" trouvées"

ForEach cible()
    String$ = ReplaceString(String$,cible()\name,Chr(32),#PB_String_NoCase,0)
Next
t1=ElapsedMilliseconds()
Debug String$
t2=t1-t0
Debug "Ar-S time : "+t2

Debug "=========================================================================="

; Marc56

A$ = L$
t0=ElapsedMilliseconds()
If CreateRegularExpression(0, "\h{2,}")
    Debug ReplaceRegularExpression(0, A$, " ")
Else
  Debug RegularExpressionError()
EndIf
t1=ElapsedMilliseconds()
t2=t1-t0
Debug "Marc56 Time : "+t2
  
  
  Debug "=========================================================================="
  
  ;GallyHC
  
  text.s = L$
t0=ElapsedMilliseconds()
text = Trim(text)
While CountString(text, "  ") > 0
  text = ReplaceString(text, "  ", " ")
Wend
t1=ElapsedMilliseconds()
t2=t1-t0
Debug text
Debug "GallyHC time : "+t2
Image
Image
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Dans un texte supprimer les éventuels doubles espaces

Message par Micoute »

Pour une fois que j'ai la plus longue, je ne vais pas m'en plaindre.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
manababel
Messages : 144
Inscription : jeu. 14/mai/2020 7:40

Re: Dans un texte supprimer les éventuels doubles espaces

Message par manababel »

Bonjour
voici ma petite contribution

Code : Tout sélectionner

;MLD le 10/9/2022
;Dans un texte supprimer les éventuels doubles espaces
a$ = "Un nombre flottant  est stocké de telle manière que la 'virgule flotte' autour de la partie réelle. De la sorte, "
b$ = "il est possible d'avoir des nombres dont la valeur peut être aussi bien grande que petite. Toutefois vous ne pouvez pas stocker"
c$ =" de grands nombres  avec une précision aussi élevée que des petits   nombres." 
L$ = a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$
L$ = L$ + a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$+a$ + b$ + c$

Procedure.s SS(L$)
max = Len(L$)
For x =1 To max
  If Asc(Mid(L$,x,1)) = 32 
    If Asc(Mid(L$,x+1,1)) = 32
      x=x+1
    EndIf
  EndIf
  LL$ = LL$ + Mid(L$,x,1) 
Next
ProcedureReturn LL$
EndProcedure

; Micoute
Procedure.s SupprimerEspaces(Chaine.s, separateur.s) ; - supprime les espaces superflus
  Protected Caractere.a = 0
  Protected Remplissage.a = 0
  Protected Sortie.s, i.i
  
  For i = 1 To Len(Chaine)
    Caractere = Asc(Mid(Chaine,i,1))
    If Caractere <> 32
      Remplissage = 1 
      Sortie + Chr(Caractere)  
    EndIf 
    
    If Caractere = 32 And Remplissage = 1
      Remplissage = 0
      Sortie + separateur
    EndIf 
  Next   
  ProcedureReturn Sortie
EndProcedure


; Case
Procedure.s SS2(L$)
max = Len(L$)
For x =1 To max
  If Asc(Mid(L$,x,1)) = 32 
    While Asc(Mid(L$,x+1,1)) = 32     ; ma modification: tant qu'il y a un espace a la position x
      x=x+1					      ; x+1
    Wend                                          ; permet de 'sauter plusieurs espace a la suite car dans ton exemple seul 1 espace est teste.
  EndIf
  LL$ = LL$ + Mid(L$,x,1) 
Next
ProcedureReturn LL$
EndProcedure


; Ar-S
Structure plop
    name.s
    pos.i
    lon.i
EndStructure

Global NewList cible.plop()

Procedure.s ars(l$)
  String$ = L$
  p$ = "[ ]{2,}" ; 2 espaces ou plus
  t0=ElapsedMilliseconds()
  CreateRegularExpression(0,p$)
  If ExamineRegularExpression(0, string$)
    While NextRegularExpressionMatch(0)
      AddElement(cible())
      cible()\name = RegularExpressionMatchString(0)
      cible()\pos = RegularExpressionMatchPosition(0)
      cible()\lon = RegularExpressionMatchLength(0)
      count+1
    Wend
  EndIf
  ForEach cible()
    String$ = ReplaceString(String$,cible()\name,Chr(32),#PB_String_NoCase,0)
  Next
  ProcedureReturn String$
EndProcedure

; Marc56
Procedure.s marc56(l$)
A$ = L$
If CreateRegularExpression(0, "\h{2,}")
    ReplaceRegularExpression(0, A$, " ")
Else
  RegularExpressionError()
EndIf
ProcedureReturn a$
EndProcedure

;GallyHC
Procedure.s GallyHC(l$)
  text.s = L$
text = Trim(text)
While CountString(text, "  ") > 0
  text = ReplaceString(text, "  ", " ")
Wend
ProcedureReturn text
EndProcedure

Procedure.s mana(L$)
  l2$=l$
  t=@l$
  t2=@l2$
  max = Len(L$)
  x1 = 0
  For x =0 To max+2
    If PeekL( t + x<<1) <> $200020
      PokeA((t2+x1), PeekL(t+x<<1))
      x1=x1+2
      EndIf
    Next
    PokeA((t2+x1), $2e)
  ProcedureReturn l2$
EndProcedure




Procedure draw(y,t1$,t2$,t3$,t4$)
  StartDrawing(WindowOutput(0))
  DrawText(5,y+00,t1$)
  DrawText(5,y+20,t2$)
  DrawText(5,y+40,"long = "+t3$)
  DrawText(5,y+60,"temps = "+t4$)
  StopDrawing()
EndProcedure

tx = 1024
ty = 800
If OpenWindow(0, 0, 0, tx, ty, "Exemple...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  StartDrawing(WindowOutput(0))
  Box(0,0,tx,ty,0)
  DrawText(5,0,"default")
  DrawText(5,20,"long = "+Len(l$))
  DrawText(5,40,l$)
  StopDrawing()
  
y = 80
t.f=ElapsedMilliseconds()
LL$ = SS(L$)
t.f=ElapsedMilliseconds() - t
lg=Len(ll$)
draw(y,"ss",ll$,Str(lg),Str(t))

y = y + 100
t.f=ElapsedMilliseconds()
LL$ = SupprimerEspaces(L$," ")
t.f=ElapsedMilliseconds() - t
lg=Len(ll$)
draw(y,"Micoute",ll$,Str(lg),Str(t))

y = y + 100
t.f=ElapsedMilliseconds()
LL$ = ss2(L$)
t.f=ElapsedMilliseconds() - t
lg=Len(ll$)
draw(y,"ss2",ll$,Str(lg),Str(t))

y = y + 100
t.f=ElapsedMilliseconds()
LL$ = ars(L$)
t.f=ElapsedMilliseconds() - t
lg=Len(ll$)
draw(y,"ars",ll$,Str(lg),Str(t))

y = y + 100
t.f=ElapsedMilliseconds()
LL$ = marc56(L$)
t.f=ElapsedMilliseconds() - t
lg=Len(ll$)
draw(y,"marc56",ll$,Str(lg),Str(t))
y = y + 100
t.f=ElapsedMilliseconds()
LL$ = GallyHC(L$)
t.f=ElapsedMilliseconds() - t
lg=Len(ll$)
draw(y,"GallyHC",ll$,Str(lg),Str(t))

y = y + 100
t.f=ElapsedMilliseconds()
LL$ = mana(L$)
t.f=ElapsedMilliseconds() - t
lg=Len(ll$)
draw(y,"mana",ll$,Str(lg),Str(t))

Repeat
  Event = WaitWindowEvent()
  
Until Event = #PB_Event_CloseWindow
EndIf
Dernière modification par manababel le lun. 12/sept./2022 6:37, modifié 3 fois.
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Dans un texte supprimer les éventuels doubles espaces

Message par GallyHC »

@manababel > dans ton exemple c'est qui galluht ?
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Dans un texte supprimer les éventuels doubles espaces

Message par Ar-S »

J'étais passé à coté de ReplaceRegularExpression :?
~~~~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
manababel
Messages : 144
Inscription : jeu. 14/mai/2020 7:40

Re: Dans un texte supprimer les éventuels doubles espaces

Message par manababel »

Dsl GallyHC
c'est une erreur de "copier coller"
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Dans un texte supprimer les éventuels doubles espaces

Message par MLD »

@ Bonjour a tous
Merci a TazNormand, et manababel
les résultats de Taz sont confirmés par ceux de manababel.
Honnêtement je n'aurais pas parié sur la fonction PB . Mais donc chapeau a Fred pour l'optimisation de la fonction. et bravo a Mrc56 pour la maitrise des RegEx
Bonne journée a tous.
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Dans un texte supprimer les éventuels doubles espaces

Message par Mesa »

Le plus simple à mon avis.

Code : Tout sélectionner

A$ = "Un nombre flottant  est stocké de telle manière que la 'virgule flotte' autour de la partie réelle. De la sorte, " + 
     "il est possible d'avoir des nombres dont la valeur peut être aussi bien grande que petite. Toutefois vous ne pouvez pas stocker" +
     " de grands nombres       avec une précision aussi élevée que des petits   nombres."

t1=ElapsedMilliseconds()

Repeat
	A = Len(A$)
	A$ = ReplaceString(A$, "  "," ")
Until A = Len(A$)

t2=ElapsedMilliseconds()

Debug A$
Debug t2-t1
M.
Répondre