关于将含中英文的长字符串一拆成两段的思考题
各位同仁所开发的软件系统都是支持中文或日文这种双字节文字的吧?
我曾替公司解决一个问题。
这个问题就是把一个100个字节长的客户地址裁成两端,以便打印在发票上。
汉字当然不可以被拦腰斩断,不然后面就都是乱码了。
请各位高手一起讨论分拆的算法。
[ 本帖最后由 franliu 于 2009-11-21 11:39 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
*PGM 我们也有:
SPLITR *PGM AAAOBJ RPGLE 字符串分解通用程序
SPLIT2ESTR *PGM AAAOBJ CLE AS/400通用程序 ,EBCDIC字符串智能拆分为两段
*PGM 的调用效率可能低一点吧?
单单只是做局部的操作,就是pgm效率也不会很低的...可以考虑哦....呵呵!
[ 本帖最后由 huangxkst 于 2009-11-22 18:05 编辑 ]
应该知道吧?例如在数据库中 地址 字段定义为 100个字节长,但是打印位置只有 40 个字节的空间,要分成3行。
其实对于中英文混合字符串的拆分还要考虑最好不要把一个英文单词从中间砍断,否则就会看不明白或者带来歧义了
除了可以使用procedure,可以写成一个公共的程序,就不需要每次使用都定义pr,直接用就可以.
截下来的长度,如果预知的话,那很简单,直接转成用UCS-2输出就可以了,就没有补0e,0f的问题了,不过这个前提是要你知道从哪里截:)
是否用了procedure就得用
H DFTACTGRP(*NO)
之类的设置?
可能还需要 ACTGRP(*CALLER) ?
能否讲解一下 ACTGRP ? 我对那玩意还不太明了。谢谢!
完全正确。c语言比较适合做此类操作。其实如果没有c编译器,rgp也很容易实现这个算法。如果用ile rpg,还可以把它做成一个procedure, 这个procedure还可以直接返回截断后的前半部分。
在AS/400中,O型字段适合保存中英文混合字符串
其中,每组全角字符前有0x0e,后有0x0f
拆分字符串当然不能把汉字的两个字节砍断
拆分若发生在全角字符中间,则左边一段末尾需要补0x0f,右边一段需要在其前加0x0e,在程序处理上当然需要考虑补、加的内容有地方可放,即100个字节的地址拆分到A和B中,则A和B的长度之和可能需要102个字节
我一般喜欢用C程序来处理此类问题,不太喜欢用RPGLE处理字符串
用一变量来保存当前指针前一字节的类型:
如:0=半角字符
1=全角字符第1字节
2=全角字符第2字节
3=0x0e
4=0x0f