| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1033 人关注过本帖
标题:今天找到怎么避免取半个中文,分享给大家。
取消只看楼主 加入收藏
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
结帖率:98.98%
收藏
已结贴  问题点数:10 回复次数:7 
今天找到怎么避免取半个中文,分享给大家。
怎么避免取半个中文呢?
1、用LENC()?SUBSTRC()?LEFTC()?是能实现,但有很多局限性,对中文数字混合的时候,难做到准确需要的长度,为什么,这里不谈了
2、还是用SUBSTR,但要判断1下?如下

a1="1你妈的B,死人1的就不知道a去死了9"
FOR I=1 TO LEN(A1)
IF ISLEADBYTE(SUBSTR(A1,I,1))=.T.
   ?SUBSTR(A1,I,2)
   I=I+1
ELSE
   ?SUBSTR(A1,I,1)
ENDIF
ENDFOR
怎么样?比如我要存的最大长度是20,我就把字段长度起为21,超过20时,查最后1位20,如果是半个字符,就取21位,否则,就取20位
为什么不用LENC()和SUBSTRC(),如果本字母混合,如
B1="12难难安南岸123啊啊啊啊"
C1=SUBSTRC(B1,1,10)
?LEN(C1)
取的是15,但不是20,所以不能用这个LENC()+SUBSTRC()
2015-09-25 10:36
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
a1=""+0h31C4E3C2E8
?A1=1你妈
a1=""+0h31C43EC2E8
?A1=1?妈
2015-09-25 13:44
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2015-09-25 13:44
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
我想,大家还没明白真正的意图
我是想表达,比如,字段最大是254个字符?万一输入了260个,我只保留254个?如果用LENC()是可以避免半个中文,但要是中英文数字混在一起,你根本就不知道,你用LENC()取多少个才刚好是254或者253个
因为用LENC()是,1个中文是长度是1,1个英文或者数字,长度也是1,也就是说
LENC("123你好")=5,LENC("12345")=5,但2者的长度,前者是7,后者是5,也就是260个中,如果用LENC()也可能是=260,也可能是=130,此时的,你怎么知道你取多少个才是最接近254的?用LENC()来取长度的方法在这里是不可取的?但如果我判断253位,如果是半个中文,就取254,否则,就取253。

IF ISLEADBYTE(SUBSTR(A1,253,1))=.T.
   A1=SUBSTR(A1,1,254)
ELSE
   A1=SUBSTR(A1,1,253)
ENDIF
2015-09-25 14:06
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用吹水佬在2015-9-25 14:02:31的发言:


是,这里就有所谓的“半个汉字”,原来的方法处理不了?

你这个a1=""+0h31C43EC2E8
本来就是=1?妈
取出来的肯定也是
1
?
2015-09-25 14:11
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
吹老斑竹,在拿我来开心啊。。
你a1=""+0h314CE3C2E8
本来就是不正常的
?A1 都是不知道显示什么东西的。。
2015-09-25 14:16
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
明白了。。
我说是,不是内存数据!
那要是内存数据,你有什么好的方法?条件也是,最大254,你取出的数据近可能是最长的,但不能有乱码?
2015-09-25 14:22
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
对了,刚才,是不是可以这样说,本身就不存在乱码的,用这个方法是可以逐个读出来,
但要是本身就存在乱码的,就不行了?
那,问你的题来了,如果本身就有乱码的,你怎么去掉某个乱码,其他的还原正常的?
2015-09-25 14:31
快速回复:今天找到怎么避免取半个中文,分享给大家。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018156 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved