| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1033 人关注过本帖
标题:今天找到怎么避免取半个中文,分享给大家。
只看楼主 加入收藏
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
结帖率:98.98%
收藏
已结贴  问题点数:10 回复次数:19 
今天找到怎么避免取半个中文,分享给大家。
怎么避免取半个中文呢?
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
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
如果处理的字符串是由键盘或其他输入设备输入的应该没问题。
如果是从任意文件或内存数据截取的字符串数据就有点麻烦,可能要逐个字节去判断处理。
2015-09-25 10:49
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
以下是引用mywisdom88在2015-9-25 10:36:23的发言:
为什么不用LENC()和SUBSTRC(),如果本字母混合,如

"1你妈的B,死人1的就不知道a去死了9" 这串可由键盘输入的,直接用LENC()和SUBSTRC()没问题.

a1="1你妈的B,死人1的就不知道a去死了9"
FOR i = 1 TO LENC(a1)
    ? SUBSTRC(a1, i, 1)
ENDFOR

看看这样,比较一下看看怎样处理
a1=""+0h31C4E3C2E8
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

a1=""+0h31C43EC2E8
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
2015-09-25 11:07
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
试一下看看 用半个时很少
2015-09-25 12:14
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
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
以下是引用mywisdom88在2015-9-25 13:44:16的发言:
a1=""+0h31C4E3C2E8
?A1=1你妈
a1=""+0h31C43EC2E8
?A1=1?妈

是,这里就有所谓的“半个汉字”,原来的方法处理不了?
2015-09-25 14:02
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
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
再看看这个,后半个汉字问题:
a1=""+0h314CE3C2E8
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
2015-09-25 14:08
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
快速回复:今天找到怎么避免取半个中文,分享给大家。
数据加载中...
 
   



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

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