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