p​b​中​截​取​混​排​字​符​串

pb中截取混排字符串  
 
宋铭  
 
  pb数据窗口没有提供调整计算域行间距的方法,甚至利用richtext类型的数据窗口也不行。我们设想,在计算域各行之间增加回车换行符来调整行间距。但由于计算域的内容是动态可变的,为此,我们设计了一个全局函数fun—string—intercept,解决了这个问题。   
  该函数有两个参数:text和len,其中text为需要处理的字符串,len为截取长度。函数按长度len把text截取成一行行的字符串,行与行之间增加一个空行,使正文部分疏落有致。   
  一、主要问题及解决方案   
  由于字符串由字母、数字和汉字混排组成,简单按固定长度截取会出现问题。需要考虑以下几个问题:  
  1. 如果截取字符串的最后一个字符刚好落到汉字中间,则会显示半个汉字,形成该行及下一行乱码。  
  解决方案:为截取字符串设计了半个汉字计数器,如计数器为奇数,则去掉最后一位字符。  
  2. 如果截取字符串最后一个字符刚好落到英文单词中间,则会把单词生硬地分割。  
  解决方案:此种情况该单词移到下一行。  
  3. 如果截取字符串最后一个字符刚好落到数字中间(如1999),则会把数字生硬地分割。  
  解决方案:此种情况该数字移到下一行。  
  4. 如果截取字符串最后一个字符刚好落到回车符(~r~n)上,则会多空一行。  

  解决方案:如果截取字符串已包含回车换行符,或者该行是最后一行且下行第一个字符是回车换行符,则截取字符串不加回车换行符。


/*ltext:text从左边截取len长度字符串*/
/*ntext: 处理后带回车换行符的text*/
/*i: ltext长度计数器*/
/*num: ltext中半个汉字计数器*/
/*rasc: ltext最右边字符的asc码*/
/*lasc: ltext下一个字符的asc码*/
integer i, num, rasc, lasc
string ltext, ntext




if len < 2 then 
return text
end if
do while text<>''
/*初始化num,重新计算ltext*/
num=0
ltext=left(text,len)
/*计算半个汉字数量*/
for i=1 to len(ltext)
if asc(mid(ltext,i,1))>=160 then
num=num+1
end if
next
for i=1 to len(ltext)
rasc=asc(right(ltext,1))
lasc=asc(mid(text,len+1,1))
/*如果ltext最右边的字符和下一个字符均为字母数字,且该行包括汉字,则ltext截掉最后一位字符*/
if rasc<160 and rasc<>10 and rasc<>13 and rasc<>32 and num>0 and lasc<160 and lasc<>10 and lasc<>13 and lasc<>32 then
ltext = left(ltext,len(ltext) - 1 )
i = i - 1
else
/*如果ltext最右边的字符是半个汉字,则ltext截掉最后一位字符*/
if rasc>=160 and mod(num,2)=1 then
ltext=left(ltext,len(ltext)-1)
i = i - 1
end if
exit
end if
next
text=right(text,len(text)-len(ltext))
/*如果 ltext不包含回车换行符,该行不是最后一行,且下一个字符不是回车换行符,则ntext增加两个回车换行符*/
if pos(ltext,'~r')=0 and pos(ltext,'~n')=0 and lasc<>10 and lasc<>13 and text<>' ' then
ntext=ntext+ltext+'~r~n~r~n'
else
ntext=ntext+ltext
end if
loop
return ntext

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值