dim. 10 décembre 2017, 06h22
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"
? 'serie(2) '
IF TestSerie(serie(1),serie(2))
?? 'suit '
Else
?? 'ne suit pas '
endif
?? 'serie(1)'
? 'serie(4) '
IF TestSerie(serie(3),serie(4))
?? 'suit '
Else
?? 'ne suit pas '
endif
?? 'serie(3)'
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)
* "cette serie ne se suivre"
success = faux
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
eddymaue a exposé le 2017-12-10 :
> il ne répond qu'en partie... trier la série soumise...
> question :
> est-ce que cette série comporte toujours le meme nombre de caractere ?
> si c'es le cas pourquoi faire compliquer
> de "v125ba" à "v125bb"
> voila
#define vrai .t.
#define faux .f.
Declare serie(4)
serie(1) = "v125ba"
serie(2) = "v125bb"
serie(3) = "v125bc"
serie(4) = "v125bf"
? 'serie(2) '
IF TestSerie(serie(1),serie(2))
?? 'suit '
Else
?? 'ne suit pas '
endif
?? 'serie(1)'
? 'serie(4) '
IF TestSerie(serie(3),serie(4))
?? 'suit '
Else
?? 'ne suit pas '
endif
?? 'serie(3)'
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)
* "cette serie ne se suivre"
succes = faux
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
> Après mûre réflexion, Marc Thivolle a écrit :
>> Eddy,
>> Si je comprends bien ton code tu proposes une méthode "simple" pour trier
>> des valeurs alphanumériques. Une autre solution, tout aussi simple, est
>> d'alimenter un tableau à une dimension et d'utiliser ensuite la fonction
>> ASCAN().
>> La question de départ est : "comment savoir si deux numéros de série ne
>> sont séparés que d'une unité". C'est du moins comme cela que je l'ai
>> interprétée. Et ton code ne répond absolument pas à cette question.
>> Mais comme dit le vieux renard : "Le compréhensible peut se réaliser si
>> l'on a tout simplement pris le temps d''analyser l’incompréhensible."
--
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=0000018670