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

Forum AtoutFox : Re: Chaînes de caractères: Une chaîne est la suite de la précédente ?   

Sujet

rss Flux RSS des derniers messages

Vous devez vous identifier pour pouvoir poser une question ou répondre.

ven. 08 décembre 2017, 18h48

Marc Thivolle
France France

atoutfox.public.association

Re: Chaînes de caractères: Une chaîne est la suite de la précédente ?

Une proposition alternative à celle de Jean qui ne fait aucune hypothèse sur la longueur de la chaine et calcule la différence entre deux numéros de série.

Les prérequis : seuls les chiffres de 0 à 9 et les lettres de a à z (minuscules ou majuscules) sont utilisées.
On travaille en base 36 (10 chiffres + 26 lettres).
La fonction onStrToNum traduit le littéral en base 36 passé en paramètre en son équivalent en base 10.



lcStr1='v125ba'
lcStr2='v125bb'
lcStr3='v125bd'
lcStr4='v125bz'
lcStr5='v125c0'
lcStr6='vzzzzz'
lcStr7='w00000'

? onStrToNum(lcStr2)-onStrToNum(lcStr1)
? onStrToNum(lcStr3)-onStrToNum(lcStr2)
? onStrToNum(lcStr5)-onStrToNum(lcStr4)
? onStrToNum(lcStr7)-onStrToNum(lcStr6)

FUNCTION onStrToNum(tcStr)

  LOCAL lcStr,lcChr,lnStr

  lnStr=0
  FOR lnI=1 TO LEN(tcStr)
    lcChr=UPPER(SUBSTR(tcStr,lnI,1))
    DO CASE
      CASE ASC(lcChr)>=48 AND ASC(lcChr)<=57  && 0...9
        lnStr=lnStr*36+VAL(lcChr)
      CASE ASC(lcChr)>=65 AND ASC(lcChr)<=90  && a...z A...Z position de la lettre dans l'alphabet +9
        lnStr=lnStr*36+ASC(lcChr)-64+9
    ENDCASE
  ENDFOR

  RETURN lnStr

ENDFUNC



Permalink : http://www.atoutfox.org/nntp.asp?ID=0000018655
20 088 messages dans le forum • Liste complète des messages

Publicité

Les pubs en cours :


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