专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > VFP

求教!VFP 9.0 sp2中CHRTRAN函数的转换有关问题

发布时间:2010-05-24 21:28:48 文章来源:www.iduyao.cn 采编人员:星星草
求教!VFP 9.0 sp2中CHRTRAN函数的转换问题
变量body为一组字符集,如:"1234567890abcdefg......" 约有200个字符组成
变量rabb为body向反排列的字符集".....gfedcba0987654321" 约有200个字符组成

然后我做了如下操作
abc1=CHRTRAN("国际域名",body,rabb)
abc2=CHRTRAN("域名",body,rabb)
? abc1
? abc2

*显示结果为:
e褛F撳    &&为abc1值
贔撳         &&为abc2值

问题是abc1最后四位字符应该和abc2值一样,但我这里显示去不一样,不知道是什么问题产生的.

另外在把abc1,abc2等类似用CHRTRAN转换过的字符放到sql 2005的select查询上后,有些字符在转递到sql后LIKE操作变成了where XXXX LIKE '%n奷馎?',少了一个%操作符,正确的应该是 where XXXX LIKE '%n奷馎?%',不知道为什么,求高手解答!

------解决方案--------------------
Visual FoxPro 9.0 语言参考 
CHRTRANC( ) 函数 
将第一个字符表达式中与第二个表达式的字符相匹配的字符替换为第三个表达式中相应的字符。
CHRTRANC(cSearched, cSearchFor, cReplacement)
参数
cSearched:指定表达式,CHRTRANC( ) 对其中的字符进行替换。 
cSearchFor:指定表达式,CHRTRANC( ) 在 cSearched 中查找此表达式。 
cReplacement:指定包含替换字符的表达式。
若在 cSearched 中发现一个 cSearchFor 中的字符,则在 cSearched 中的字符用 cReplacement 中的一个字符替换。替换字符在 cReplacement 中的位置与被替换字符在 cSearchFor 中的位置相同。
若 cReplacement 中的字符比 cSearchFor 中的字符少,则删除 cSearchFor 中多余的字符。若 cReplacement 中的字符比 cSearchFor 中的字符多,则忽略 cReplacement 中多余的字符。 
返回值:字符型
说明
CHRTRANC( ) 是为包含双字节字符的表达式设计的。CHRTRANC( ) 把单字节字符替换成双字节字符或双字节字符替换成单字节字符。如果表达式只包含单字节, CHRTRANC( ) 等同于 CHRTRAN( )。
该函数在操作象“平假名”和“片假名”这样的双字节字符集语言时是有用的。

示例:
a=[123456abcdefg]
b=[gfedcba654321]
c=[1a2b3c4d5e6fg]
?CHRTRANC(c,a,b)
?CHRTRANC(c,b,a)


------解决方案--------------------
VFP不支持UTF8,检查一下SQLSERVER2005的字符集
有双字节的用CHRTRANC
------解决方案--------------------
body,rabb有可能正常前后组合时正常组成了一个汉字,因为汉字是双字节,所以 CHRTRAN 时会因为长度不同而有舍去,也就是说不能用 CHRTRAN 对双字节操作。
举个例子:
body='123ABC'
rabb='CBA321'  基中 BA 正好组成了1个汉字,这个实际值就成了 rabb='C'+1个汉字+'321',并不是body的反排序。
------解决方案--------------------
推荐用 木瓜大侠的 MyFll.fll 中的加密函数

------解决方案--------------------
<木瓜的MyFll.fll(1.187.10.803)及说明>
http://www.access911.net/CSDN/FileDescription.asp?mdb=2012-11-10&id=10
<木瓜的MyFll.fll(1.182.10.526)及说明>
http://download.csdn.net/source/2505656

------解决方案--------------------
要是加密后,还能看出来cStr1的内容与cStr2的内容有相同,那加密就没有意义了,就可以容易解密了,或者说就不能加密码了。
应该解密后再比对。
------解决方案--------------------
应该是这样吧:
存储时:将数据加密后存储。
查询时:将输入的数据加密后再与存储的数据对比,或者将存储的数据解密后与输入的未加密的数据对比。

我的操作员密码是这样:
存储时:将数据加密后存储。
对比操作员密码时,用视图将所有操作员取到本地为临时表,然后选择或输入操作员(这里操作员临时表定位到对应的操作员了),最后将输入的密码加密后与表中原来加密后存储的密码进行比对。
------解决方案--------------------
引用:
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: