CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他数据库开发 >  VFP

字段处理

楼主luwq168(后备甜心)2002-11-11 23:26:04 在 其他数据库开发 / VFP 提问

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

1 楼vongates968(Gate)回复于 2002-11-12 10:59:10 得分 10

是不是可以試一下substrc()呀,它好像是不分單字節還是雙字節吧!!  
   
  還有相關函數:AT_C(),LEFTC(),RIGHTC(),STUFFC()可以參考喲Top

2 楼luwq168(后备甜心)回复于 2002-11-15 23:27:07 得分 0

比如有这样二个字段:  
  1、解放东路148号B幢7楼108室  
  2、中山北路12号C幢8楼101室  
  在打印时分成二行:  
  1、解放东路148号  
        B幢7楼108室  
  2、中山北路12号  
        C幢8楼101室  
  设该字段为Dz  
  怎样用每行一个表达式进行正确打印?Top

3 楼luwq168(后备甜心)回复于 2002-11-16 22:45:28 得分 0

?Top

4 楼zhjame(三人行,必有我师)回复于 2002-11-17 12:30:34 得分 0

我看不用分,在REPORT下调用自定义过程就可以解决了。Top

5 楼luwq168(后备甜心)回复于 2002-11-17 14:03:11 得分 0

这是我的目的!!!Top

6 楼newfang(传说中的MIC)回复于 2002-11-17 15:17:05 得分 10

计算标签宽度,看它可以容下多少字。  
  不行就转行嘛!Top

7 楼luwq168(后备甜心)回复于 2002-11-17 16:56:49 得分 0

如何转行????方法????函数????Top

8 楼luwq168(后备甜心)回复于 2002-11-17 17:04:44 得分 0

宽度是确定的!!Top

9 楼luwq168(后备甜心)回复于 2002-11-17 17:19:33 得分 0

问题在于,半角字符的奇偶数不确定,不能用确定的结束位和开始位进行简单处理!!我设计的程序在套印许可证时,单位名称和地址在正本上放在一行,在副本上放在二行(较长时),每行宽度14个汉字,请高手解决!!Top

10 楼mudong(木东)回复于 2002-11-18 11:29:38 得分 40

只是对这个问题有兴趣、说一点想法、供参考(没有实际做过)  
  基本想法是判断第28个字符是否与后一个字符合起来是一个全角字符。若是、放在下一行打印。  
  那么先要分出某一个字符是全角还是半角字符、比如ASCII码<127?  
  然后需要“数出来”前28个字符有多少个半角字符。如是奇数、分在下一行...  
  Top

11 楼zhjame(三人行,必有我师)回复于 2002-11-18 12:35:23 得分 10

不要用半角函数,改用双字节函数啊,  
  atcc()  
  lenc()  
  substrc()  
  都是双字节函数啊  
  看看MSDN后面的介绍吧。Top

12 楼vongates968(Gate)回复于 2002-11-18 12:51:13 得分 10

只要你用的函數都是32位的就好了呀,樓上說的對呀,我也有說過上面的函數  
   
  要多試,就會好了!!Top

13 楼mudong(木东)回复于 2002-11-18 15:37:07 得分 0

zhjame(三人行,必有我师)   说的对。只要注意子串长度便成。Top

14 楼luwq168(后备甜心)回复于 2002-11-19 00:13:58 得分 0

我觉得mudong(木东)的想法可行,分行打印函数确实也有一个,只不过好象不能用在标签表达式里(我曾查到过但记不得了是什么函数了)它的作用是这样的:设temp="This   is   a   pig."  
  set   memowidth   to   一个数值(这很难懂)  
  该函数名(temp)  
  然后输出:  
   
  This   is  
  a   pig.  
   
  我再重申一遍,如果用双字节函数,还是要涉及到结束位和开始位的设定,可能碰到从一个汉字的一半开始,造成乱码,这是行不通的.  
  Top

15 楼luwq168(后备甜心)回复于 2002-11-19 00:58:23 得分 0

我理解有误。  
  双字节函数的使用又造成另外一个问题,就是它把半角字符也当成一个汉字,可能使打印的结果前面一行长短不一,半角字符多的时候会很短。如何解决?Top

16 楼luwq168(后备甜心)回复于 2002-11-19 02:13:07 得分 0

我已找到解决办法,设计函数如下:  
  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  
   
  请大家批评指正!!!Top

相关问题

  • VC处理blob字段
  • 空字段怎么处理
  • blob字段的处理?
  • delphi 中,memo字段如何处理
  • ACCESS时间字段怎么处理
  • image字段的处理,急呀!!
  • 如何处理字段中的“'”?
  • Oracle clob 字段处理问题
  • 如何处理字段中的空格
  • pb如何处理text,ntext字段

关键词

  • 字段
  • 字符
  • 打印
  • 解决
  • 半角
  • 处理
  • 放在
  • 标签
  • 一行
  • 室

得分解答快速导航

  • 帖主:luwq168
  • vongates968
  • newfang
  • mudong
  • zhjame
  • vongates968

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo