百分求救 PB9.0.2 b.7509 的 Mid()函数 和 PB11.1 8123 的 MidA() 函数的问题

hsc456 2008-10-23 03:05:38
各位兄弟,我把PB9的程序升级到PB11后 发现好多乱码问题,一下是我写的实例,谁能帮忙搞定

一百分给各位兄弟酬谢!!!!


//PB9.0.2 b.7509 的 Mid()函数

string ls_printstr,ls_Number
long i

ls_printstr='你好呀'

For i = 1 to Len(ls_printstr)
ls_Number = Mid(ls_printstr, i, 1)
//messagebox('',Asc(ls_Number))
sle_1.text = sle_1.text+string(Asc(ls_Number))+'/'
NEXT

/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////

//PB11.1 8123 的 MidA()

string ls_printstr,ls_Number
long i

ls_printstr='你好呀'

For i = 1 to Len(ls_printstr)
ls_Number = MidA(ls_printstr, i, 1)
//messagebox('',Asc(ls_Number))
sle_1.text = sle_1.text+string(AscA(ls_Number))+'/'
//sle_1.text = sle_1.text+string(Asc(ls_Number))+'/'
NEXT





...全文
694 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wisgtalt 2009-08-11
  • 打赏
  • 举报
回复
为什么不直接用AscA?
奇怪了.STRING Function系的函数.
PB11开始后面带A的就是ASC标准函数,就是相当于以前的那些
newniu666 2009-01-16
  • 打赏
  • 举报
回复
你好
我测试过了 在pb9中用asc("界")是得到的首字符的值(一个汉字二个字节吗);值<200的
而在pb11中的asc("界")返回值>1000的
pb在这两个的系统中把汉字处理不同,内部机制的问题 pb11中把汉字当成一个字节了.
其实 从pb10以上的汉字处理的机制就变了,我也在处理中.共同学吧!
hsc456 2008-10-26
  • 打赏
  • 举报
回复
AFIC 是对的,验证过了,昨天是我没有仔细验证,谢谢!!!

高手呀,佩服,佩服.......感激,感激......

只有70分,确实太少了,还请笑纳......

交个朋友吧!

QQ:64575761
hsc456 2008-10-25
  • 打赏
  • 举报
回复
问题还是没有解决

Mid(ls_printstr, i, 1) ----PB9
MidA(ls_printstr, i, 1) ----PB11

这两行得问题,修改为如下都有问题,说明是PB11的BUG
---------------------------PB9
Mid('你好呀', 1, 1)
Mid('你好呀', 2, 1)
...

---------------------------PB11
MidA('你好呀', 1, 1)
MidA('你好呀', 2, 1)
Mid('你好呀', 1, 1)
Mid('你好呀', 2, 1)

这真的PB11的BUG 建议各位兄弟不要轻易升级PB了,升级就是噩梦得开始。
AFIC 2008-10-25
  • 打赏
  • 举报
回复
什吗?值不对?当着这么多人说谎可不好哦。

这是你写的代码(pb9),懒得弄sle直接把你注释的messagebox打开没错吧?

string ls_printstr,ls_Number
long i

ls_printstr='你好呀'

For i = 1 to Len(ls_printstr)
ls_Number = Mid(ls_printstr, i, 1)
messagebox('',Asc(ls_Number))
NEXT

然后这是我上边写的代码(pb11),一点没变

string ls_printstr = '你好呀'
byte lbt_byte[]
long i
lbt_byte = GetByteArray(blob(ls_printstr,encodingansi!))
for i = 1 to upperbound(lbt_byte)
messagebox('ascii',lbt_byte[i] )
next

都是弹出6次messagebox,分别是196,227,186,195,209,189
到底哪里值不对??任何人都可以验证的。
hsc456 2008-10-25
  • 打赏
  • 举报
回复
楼上的兄弟言辞虽然犀利,可惜还是没有解决我的问题 得出来的结果值不对。请用PB9_7509以下版本和 PB11 任何版本测试。

还是非常感谢 AFIC 兄弟。

我也不是造谣,是想给要升级源代码的同行一个提醒。

这个问题我已经搞了3天了,还是没有解决,要是周三前还不能解决,
只能重新还原到一个月前的版本,也就是这月白忙乎了。

主要是汉字写串口并口设备,设备上都是乱码!!!呜呜^^^^^^^

你说这不是噩梦吗,在升级过程中已经处理了很多很多问题,工作量15天左右,全白忙乎了……

这个问题解决了,你别说我水平不灵,就算骂我是笨猪,我都认了,(*^__^*) 嘻嘻……
AFIC 2008-10-25
  • 打赏
  • 举报
回复
是你水平不灵,别没事造谣好不好,你不就想取ascii码吗,这种转化在pb11根本就不用循环
string ls_printstr = '你好呀'
byte lbt_byte[]
long i
lbt_byte = GetByteArray(blob(ls_printstr,encodingansi!))
for i = 1 to upperbound(lbt_byte)
messagebox('ascii',lbt_byte[i] )
next
yeah920 2008-10-24
  • 打赏
  • 举报
回复
帮忙顶.
Methodor 2008-10-23
  • 打赏
  • 举报
回复
函数定义不同,按其定义修改即可
jlwei888 2008-10-23
  • 打赏
  • 举报
回复
jf
zhangyh_136 2008-10-23
  • 打赏
  • 举报
回复

string ls_printstr,ls_Number
long i

ls_printstr='你好呀'

For i = 1 to Lenw(ls_printstr)
ls_Number = Midw(ls_printstr, i, 1)
//messagebox('',Asc(ls_Number))
sle_1.text = sle_1.text+string(AscA(ls_Number))+'/'
//sle_1.text = sle_1.text+string(Asc(ls_Number))+'/'
NEXT

将len改为lenw,Mida 改为Midw ,搞定
zhangyh_136 2008-10-23
  • 打赏
  • 举报
回复

string ls_printstr,ls_Number
long i

ls_printstr='你好呀'

For i = 1 to Lenw(ls_printstr)
ls_Number = Midw(ls_printstr, i, 1)
//messagebox('',Asc(ls_Number))
sle_1.text = sle_1.text+string(AscA(ls_Number))+'/'
//sle_1.text = sle_1.text+string(Asc(ls_Number))+'/'
NEXT

将len改为lenw,Mida 改为Midw ,搞定
zhangyh_136 2008-10-23
  • 打赏
  • 举报
回复
For i = 1 to For i = 1 to Len(ls_printstr)
ls_Number = MidA(ls_printstr, i, 1)
//messagebox('',Asc(ls_Number))
sle_1.text = sle_1.text+string(AscA(ls_Number))+'/'
//sle_1.text = sle_1.text+string(Asc(ls_Number))+'/'
NEXT


Len修改为lenW(),MidA 修改为Midw
pcwe2002 2008-10-23
  • 打赏
  • 举报
回复
//PB11.1 8123 的 MidA()

string ls_printstr,ls_Number
long i

ls_printstr='你好呀'

For i = 1 to LenA(ls_printstr)
ls_Number = MidA(ls_printstr, i, 1)
//messagebox('',Asc(ls_Number))
sle_1.text = sle_1.text+string(AscA(ls_Number))+'/'
//sle_1.text = sle_1.text+string(Asc(ls_Number))+'/'
NEXT

将len改为lenA试试

740

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧