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.

sam. 09 décembre 2017, 14h23
eddymaue
atoutfox.public.association

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

allo a tous

c'est un probleme si simple a traiter avec une table

* quelques definitions de mon fichier condition.h
#Define true .T.
#Define false .F.
#Define IsTrue = .T.
#Define IsFalse = .F.
#Define SetTrue Store true To
#Define SetFalse Store false To


* Creation d'une table
Private gc_name ; && nom de la table
gc_fld : && champs a travailler
m.gc_name = "csrSerie"
m.gc_fldname = "iid"
m.gc_fldtype = "c(1)"

*Set Step On
Create Cursor (m.gc_name) ( &gc_fldname &gc_fldtype )
Clear
? "avant :", Fsize(gc_fldname)
AjoutSerie(m.gc_name , m.gc_fldname , "v5bf")
?? " apres ",Fsize(gc_fldname)
? "avant :", Fsize(gc_fldname)
AjoutSerie(m.gc_name , m.gc_fldname , "v3af")
?? " apres ",Fsize(gc_fldname)
? "avant :", Fsize(gc_fldname)
AjoutSerie(m.gc_name , m.gc_fldname , "v125bf")
?? " apres ",Fsize(gc_fldname)
? "avant :", Fsize(gc_fldname)
AjoutSerie(m.gc_name , m.gc_fldname , "v125ba")
?? " apres ",Fsize(gc_fldname)
? "avant :", Fsize(gc_fldname)
AjoutSerie(m.gc_name , m.gc_fldname , "v125bd")
?? " apres ",Fsize(gc_fldname)
? "avant :", Fsize(gc_fldname)
AjoutSerie(m.gc_name , m.gc_fldname , "v125bb")
?? " apres ",Fsize(gc_fldname)
? "avant :", Fsize(gc_fldname)
AjoutSerie(m.gc_name , m.gc_fldname , "v125be")
?? " apres ",Fsize(gc_fldname)

*Set Step On
?
? 'avant indexation '
? ' ---------------- '
Scan all
? Recno(), &gc_fldname
Endscan

Index on &gc_fldname tag &gc_fldname
Set Order To iid

?
? 'apres indexation '
? ' ---------------- '
Scan all
? Recno(), &gc_fldname
Endscan



Procedure AjoutSerie(tcTable, tcFld, tcItem)
Local success
SetTrue Sucess

Do Case
Case success IsTrue
&& inutile ici mais dans une procédure avec beaucoup de profondeur
cela sert
&& à valider les traitements antérieurs

Case Vartype(m.tcItem) =="C" IsFalse
&& test le type et si c'est de type STRING je trim
Assert .F. Message "tcItem n'est pas de type STRING"
SetFalse success

Case doTrim(@tcItem) IsFalse

Case Empty(tcItem) IsTrue
Assert .F. Message "tcItem est vide"
SetFalse success

Case DoCmpSize_Arg_Fld( m.tcTable , m.tcFld , m.tcItem) IsFalse
&& compare les longueurs argument et du champs

Otherwise
Insert Into (tcTable) (&tcFld) Values (tcItem)
Endcase

Return .T.

Procedure DoCmpSize_Arg_Fld(tcTable, tcFld , tcItem )
Assert Vartype( tcTable ) =="C" Message "'tcTable' doit etre de type
string"
Assert Vartype( tcFld ) =="C" Message "'tcFld' doit etre de type
string"
Assert Vartype( tcItem ) =="C" Message "'tcItem' doit etre de type
string"

Local lnLongueurItem As Integer
Local lnLongueurFld As Integer
Local lcDescFld As Character
Local lcColTypeSize As Character

m.lnLongueurItem = Len(m.tcItem)
m.lnLongueurFld = Fsize( m.tcFld , m.tcTable)


If m.lnLongueurItem > m.lnLongueurFld

m.lcDescFld = m.tcFld + " C("+Transform(m.lnLongueurItem)+")"

Alter Table &tcTable Alter Column &lcDescFld
Endif
Return true




Procedure doTrim(tcItem)
Store Alltrim(tcItem) To tcItem
Return true



Marc Thivolle a couché sur son écran :
> Bonjour,

> Le problème avec ta fonction est que tu traduis en base 10 une numérotation
> qui comprend 36 symboles. Ca ne peut pas marcher. Par exemple les chaines
> 'AK' et 'BA' ont la même représentation, soit 725. D'où la nécessité de bien
> prendre une base 36 pour assurer une bijection entre la chaine passée en
> paramètre et le numérique renvoyé par la fonction..

> Attention : dans l'exemple que j'ai fourni, il faut faire attention à la
> précision autorisée pour un numérique dans VFP. Au delà de 8 caractères le
> résultat est aléatoire.

--
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=0000018661
20 087 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