字段处理

落单枫叶 2002-11-11 11:26:04
在设计许可证之类的打印标签时,我把一个较长的字段在表中分成两个字段进行处理,如单位名称、地址等,因为在标签打印的时候,一个字段的内容有时放在一行,有时要放在两行,如果不分的话,会出现乱码,(常有全角和半角混合的情况而不能用substr()函数)请问如何合并在一个字段而又能解决以上情况?

简而言之,就是如何处理全角和半角字符混合字段的分行打印?
...全文
90 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
落单枫叶 2002-11-19
  • 打赏
  • 举报
回复
我理解有误。
双字节函数的使用又造成另外一个问题,就是它把半角字符也当成一个汉字,可能使打印的结果前面一行长短不一,半角字符多的时候会很短。如何解决?
落单枫叶 2002-11-19
  • 打赏
  • 举报
回复
我觉得mudong(木东)的想法可行,分行打印函数确实也有一个,只不过好象不能用在标签表达式里(我曾查到过但记不得了是什么函数了)它的作用是这样的:设temp="This is a pig."
set memowidth to 一个数值(这很难懂)
该函数名(temp)
然后输出:

This is
a pig.

我再重申一遍,如果用双字节函数,还是要涉及到结束位和开始位的设定,可能碰到从一个汉字的一半开始,造成乱码,这是行不通的.
落单枫叶 2002-11-19
  • 打赏
  • 举报
回复
我已找到解决办法,设计函数如下:
FUNCTION dwdz
PARA dwdz0,n
x=0
for i=0 to 28
x=iif(ISLEADBYTE(substr(dwdz0,i)),x+1,x)
endfor
if x%2=0
dwdz1=substr(dwdz0,1,28)
dwdz2=substr(dwdz0,29,56)
else
dwdz1=substr(dwdz0,1,27)
dwdz2=substr(dwdz0,28,56)
endif
do case
case n=1
return dwdz1
case n=2
return dwdz2
endcase

请大家批评指正!!!
vongates968 2002-11-18
  • 打赏
  • 举报
回复
只要你用的函數都是32位的就好了呀,樓上說的對呀,我也有說過上面的函數

要多試,就會好了!!
zhjame 2002-11-18
  • 打赏
  • 举报
回复
不要用半角函数,改用双字节函数啊,
atcc()
lenc()
substrc()
都是双字节函数啊
看看MSDN后面的介绍吧。
mudong 2002-11-18
  • 打赏
  • 举报
回复
只是对这个问题有兴趣、说一点想法、供参考(没有实际做过)
基本想法是判断第28个字符是否与后一个字符合起来是一个全角字符。若是、放在下一行打印。
那么先要分出某一个字符是全角还是半角字符、比如ASCII码<127?
然后需要“数出来”前28个字符有多少个半角字符。如是奇数、分在下一行...
mudong 2002-11-18
  • 打赏
  • 举报
回复
zhjame(三人行,必有我师) 说的对。只要注意子串长度便成。
zhjame 2002-11-17
  • 打赏
  • 举报
回复
我看不用分,在REPORT下调用自定义过程就可以解决了。
落单枫叶 2002-11-17
  • 打赏
  • 举报
回复
问题在于,半角字符的奇偶数不确定,不能用确定的结束位和开始位进行简单处理!!我设计的程序在套印许可证时,单位名称和地址在正本上放在一行,在副本上放在二行(较长时),每行宽度14个汉字,请高手解决!!
落单枫叶 2002-11-17
  • 打赏
  • 举报
回复
宽度是确定的!!
落单枫叶 2002-11-17
  • 打赏
  • 举报
回复
如何转行????方法????函数????
newfang 2002-11-17
  • 打赏
  • 举报
回复
计算标签宽度,看它可以容下多少字。
不行就转行嘛!
落单枫叶 2002-11-17
  • 打赏
  • 举报
回复
这是我的目的!!!
落单枫叶 2002-11-16
  • 打赏
  • 举报
回复
?
落单枫叶 2002-11-15
  • 打赏
  • 举报
回复
比如有这样二个字段:
1、解放东路148号B幢7楼108室
2、中山北路12号C幢8楼101室
在打印时分成二行:
1、解放东路148号
B幢7楼108室
2、中山北路12号
C幢8楼101室
设该字段为Dz
怎样用每行一个表达式进行正确打印?
vongates968 2002-11-12
  • 打赏
  • 举报
回复
是不是可以試一下substrc()呀,它好像是不分單字節還是雙字節吧!!

還有相關函數:AT_C(),LEFTC(),RIGHTC(),STUFFC()可以參考喲

2,727

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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