ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Renverser une chaîne de caractères   



L'auteur

Gregory Adam
Belgique Belgique
Membre Actif (personne physique)
# 0000001121
enregistré le 04/06/2006

Fiche personnelle


Note des membres
pas de note

Contributions > 20 - Trucs et Astuces

Renverser une chaîne de caractères
# 0000000524
ajouté le 22/03/2008 13:09:48 et modifié le 22/03/2008
consulté 8708 fois
Niveau débutant

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0
VFP 5.0
VFP 3.0


Le téléchargement des pièces jointes est limité aux membres
Veuillez vous identifier ou vous inscrire si vous n'avez pas encore de compte ...
Description

Pour renverser une chaîne de caractères, on peut employer une fonction écrite en FoxPro avec une boucle.  Cela a le désavantage d'être lent a cause des opérations sur la chaine ( StringReverse_Slow() )

Une solution est d'employer une fonction api.  Et on le fait d'une manière transparente

La première fois qu'on appelle StringReverse(), c'est la fonction vfp qui sera appelée.  Celle-ci va déclarer une fonction api qui, une fois déclarée, sera toujours appelée directement au lieu de la fonction vfp.  En bref, la fonction vfp ne sera executée qu'une fois

Une boucle de 1 a 1000000 

14 sec: StringReverse_Slow(m.s)

1.8 sec: StringReverse(m.s)

 && Si la chaîne risque de contenir des hex 0x00 il faut prendre un autre train

6.6 sec : StringReverseX(m.s)

Code source :
local s
s = 'fedcba987654210'

? StringReverse(m.s) && 012456789abcdef

*--------------------------------------------------------------------------
function StringReverse(s)

  declare string  _strrev in msvcrt.dll as StringReverse string@

  return StringReverse(m.s)
endfunc
*--------------------------------------------------------------------------

function StringReverse_Slow(s)

  local Out, i
  Out = ''
  for i = len(m.s) to 1 step -1
    Out = m.out + substr(m.s, m.i, 1)
  endfor

  return m.out

endfunc

*--------------------------------------------------------------------------
#if .f.
  (1) Convert to hex
  (2) add 0x0000 (wide char terminating null char
  (3) stringreverse wide char
  (4) convert from hex to ascii
#endif
function StringReverseX(s)

  return strconv(StringReverseW(strconv(m.s, 15) + bintoc(0, '2s')), 16)

endfunc
*--------------------------------------------------------------------------
function StringReverseW(s) && wide char

  declare string  _wcsrev in msvcrt.dll as StringReverseW string

  return StringReverseW(m.s)
endfunc
*--------------------------------------------------------------------------
Commentaires
Aucun commentaire enregistré ...

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3