如何截取(字符串)字段的一部分内容?

ly_lei 2006-07-27 10:45:14
数据窗口对象的一个字段内容为项目名称加项目编码的形式,如“B超常规检查[2000000001]”,长度不定,我想要实现如下功能:如果名称长度大于12个字,则选取前12个字加上编码;名称长度小于12个字,就原样输出。有什么办法可以实现吗?向高手请教!
...全文
426 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我靠: midW (项目名称, 1, 12 ) + 编码 //12或是6你自己决定

如果这样不行的话我把小鸡鸡割下来给你垫座 !!!!!!!!!!!!!!!!
txaywzc 2006-07-28
  • 打赏
  • 举报
回复
string ls_string,ls_bm,ls_mc
int li_len,li_place

ls_string='AB一二三四五六七八九十一二三四[200000001]'
li_place=pos(ls_string,'[')
li_len=24


if li_place>25 then // 不好意思**************


ls_bm=mid(ls_string,li_place)
if mod(li_place,2)=0 then li_len=li_len - 1 //判断是否含有奇数个英文字符,防止截取半个汉字
ls_mc=mid(ls_string,1,li_len)
ls_string=ls_mc+ls_bm
end if

return ls_string


7版本没有midw()这个函数,8.04以上的版本才有
txaywzc 2006-07-28
  • 打赏
  • 举报
回复
string ls_string,ls_bm,ls_mc
int li_len,li_place

ls_string='AB一二三四五六七八九十一二三四[200000001]'
li_place=pos(ls_string,'[')
li_len=24

if li_place>13 then
ls_bm=mid(ls_string,li_place)
if mod(li_place,2)=0 then li_len=li_len - 1 //判断是否含有奇数个英文字符,防止截取半个汉字
ls_mc=mid(ls_string,1,li_len)
ls_string=ls_mc+ls_bm
end if

return ls_string


7版本没有midw()这个函数,8.04以上的版本才有
ly_lei 2006-07-28
  • 打赏
  • 举报
回复
先谢谢以上回答。请仔细看:名称[编码]是一个字段,并不是两个字段。以上回答都把它当成两个字段来处理啦。我用的是PB7.0。难道没有高人?
ly_lei 2006-07-28
  • 打赏
  • 举报
回复
谢谢太虚,你写的很清楚,我看的也很明白。请你帮我看看我的实现方法:
我想在数据窗口对象中字段的“format”属性中运用表达式解决这个问题,假设X为字段。
我的写法:if(pos(X,'[')<=25,X,left(X,24)+right(X,len(X)-pos(X,'['))),但老提示出错。不知原因在哪,请教!请教!
ly_lei 2006-07-27
  • 打赏
  • 举报
回复
大家没有明白我的意思,并不是强行选取前十二个字。这个字段的形式为“名称[编码]”,[编码]始终保留,并且长度不定,而名称根据情况来截取:大于12个字,截取前十二个字,小于12个字,就不动。举个例子:如果字段原内容为“一二三四五六七八九十一二三四[200000001]”的话,就把它变成:“一二三四五六七八九十一二[200000001]”
  • 打赏
  • 举报
回复
中英文混合应该用

midW (项目名称, 1, 6 ) + 编码
  • 打赏
  • 举报
回复
mid (项目名称, 1, 12 ) + 编码
  • 打赏
  • 举报
回复
用一个计算列搞定

611

社区成员

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

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