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.

lun. 11 décembre 2017, 22h48
eddymaue
atoutfox.public.association

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

#Define vrai .T.
#Define faux .F.

Declare serie(4)
serie(1) = "v125ba"
serie(2) = "v125bb"
serie(3) = "v125bc"
serie(4) = "v125bf"

Clear

s1 = "1799"
s2 = "1800"
?
? "cette serie "+ s1 + " , " +s2 + iif( TestSerie( s1 , s2 ) ,' se suit
' ,' ne se suit pas ' )
s1 = serie(1)
s2 = serie(2)
?
? "cette serie "+ s1 + " , " +s2 + iif( TestSerie( s1 , s2 ) ,' se suit
' ,' ne se suit pas ' )
s1 = serie(3)
s2 = serie(4)
?
? "cette serie "+ s1 + " , " +s2 + iif( TestSerie( s1 , s2 ) ,' se suit
' ,' ne se suit pas ' )






Procedure TestSerie(s1,s2)

Local lcAlphaMin, lcAlphaMaj,lcNum1, lcAphaNum
lcAlphaMin = 'abcdefghijklmnopqrstuvwxyz'
lcAlphaMaj = Upper(m.lcAlphaMin)
lcNum1 = '0123456789'
lcNum2 = '1234567890'

* un jeu de caractère s'offre
* et je vais me résumer à un choix
*Set Step On
m.lcAphaNum = m.lcNum1 + m.lcAlphaMin &&
'0123456789abcdefghijklmnopqrstuvwxyz'

success = .T.

Do Case
Case Len(s1) # Len(s2)
* "cette serie ne peut se suivre"
success = faux

Case Left(s1,Len(s1)-1) # Left(s2,Len(s2)-1)

If fn_SiChiffre(s1,s2) = success

Else
* "cette serie ne se suivre"
success = faux
Endif
Otherwise
* autrement il ne reste qu'a comparer le dernier caractere
c1 = Substr(s1,Len(s1),1)
c2 = Substr(s2,Len(s2),1)

* compare la position de c1 dans la liste m.lcAphaNum
* a la position de c2 dans cette meme liste
If At(c1,m.lcAphaNum) = At(c2,m.lcAphaNum)-1
Else
success = faux
Endif

Return success
Endcase
Endproc

Function fn_SiChiffre(s1 As String ,s2 As String ) && si ce sont des
chiffres à analyser
Local lnNlettre As Integer,;
i As Integer ,;
liTrouve As Integer ,;
lcNum As String ,;
success as Logical

m.success = vrai

m.lcNum = '0123456789'
m.lnNlettre = Len(s1)
m.liTrouve = 0
For m.i = m.lnNlettre To 1 Step -1

If Substr(s1,i,1) $ m.lcNum And Substr(s2,i,1) $ m.lcNum
m.liTrouve = m.liTrouve + 1
Loop
Endif

Endfor

If m.liTrouve > 0

If Abs( Val( Right(s2,m.liTrouve) ) - Val( Right(s1,m.liTrouve) ) )
#1
success = faux
EndIf

Else

success = faux

Endif

Return success

Endfunc

--
a+ Eddy
L'incompréhensible se réalise toujour avant le compréhensible parce que
tout simplement on ne l'a pas encore assimilé
Permalink : http://www.atoutfox.org/nntp.asp?ID=0000018676
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