关于将含中英文的长字符串一拆成两段的思考题

发布于 2022-08-22 06:38:52 字数 219 浏览 23 评论 9

各位同仁所开发的软件系统都是支持中文或日文这种双字节文字的吧?
我曾替公司解决一个问题。
这个问题就是把一个100个字节长的客户地址裁成两端,以便打印在发票上。

汉字当然不可以被拦腰斩断,不然后面就都是乱码了。

请各位高手一起讨论分拆的算法。

[ 本帖最后由 franliu 于 2009-11-21 11:39 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

烟雨凡馨 2022-09-01 23:55:47

*PGM 我们也有:
SPLITR      *PGM      AAAOBJ      RPGLE        字符串分解通用程序      
SPLIT2ESTR  *PGM      AAAOBJ      CLE         AS/400通用程序 ,EBCDIC字符串智能拆分为两段

长安忆 2022-09-01 23:55:45

原帖由 huangxkst 于 2009-11-22 17:40 发表
除了可以使用procedure,可以写成一个公共的程序,就不需要每次使用都定义pr,直接用就可以.

*PGM 的调用效率可能低一点吧?

恰似旧人归 2022-09-01 23:55:45

单单只是做局部的操作,就是pgm效率也不会很低的...可以考虑哦....呵呵!

[ 本帖最后由 huangxkst 于 2009-11-22 18:05 编辑 ]

落叶缤纷 2022-09-01 23:55:16

原帖由 llfgod 于 2009-11-21 23:18 发表
截下来的长度,如果预知的话,那很简单,直接转成用UCS-2输出就可以了,就没有补0e,0f的问题了,不过这个前提是要你知道从哪里截:)

应该知道吧?例如在数据库中 地址 字段定义为 100个字节长,但是打印位置只有 40 个字节的空间,要分成3行。
其实对于中英文混合字符串的拆分还要考虑最好不要把一个英文单词从中间砍断,否则就会看不明白或者带来歧义了

愿得七秒忆 2022-09-01 23:55:11

除了可以使用procedure,可以写成一个公共的程序,就不需要每次使用都定义pr,直接用就可以.

雨后彩虹 2022-09-01 23:51:18

截下来的长度,如果预知的话,那很简单,直接转成用UCS-2输出就可以了,就没有补0e,0f的问题了,不过这个前提是要你知道从哪里截:)

小…红帽 2022-09-01 23:50:45

是否用了procedure就得用
     H DFTACTGRP(*NO)
之类的设置?
可能还需要 ACTGRP(*CALLER) ?
能否讲解一下 ACTGRP ? 我对那玩意还不太明了。谢谢!

梓梦 2022-09-01 21:09:02

完全正确。c语言比较适合做此类操作。其实如果没有c编译器,rgp也很容易实现这个算法。如果用ile rpg,还可以把它做成一个procedure, 这个procedure还可以直接返回截断后的前半部分。

撩发小公举 2022-09-01 00:31:10

在AS/400中,O型字段适合保存中英文混合字符串
其中,每组全角字符前有0x0e,后有0x0f
拆分字符串当然不能把汉字的两个字节砍断
拆分若发生在全角字符中间,则左边一段末尾需要补0x0f,右边一段需要在其前加0x0e,在程序处理上当然需要考虑补、加的内容有地方可放,即100个字节的地址拆分到A和B中,则A和B的长度之和可能需要102个字节
我一般喜欢用C程序来处理此类问题,不太喜欢用RPGLE处理字符串
用一变量来保存当前指针前一字节的类型:
如:0=半角字符
1=全角字符第1字节
2=全角字符第2字节
3=0x0e
4=0x0f

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文