如何从cobol中的国家数据类型中删除@字符

时间:2017-04-26 14:55:14

标签: db2 cobol mainframe db2-zos

我在将unicode数据转换为国家字符时遇到问题。 当我使用国家函数将Unicode数据转换为国家时,在字符串后面会附加一些像@这样的垃圾字符。

E.g Ws-unicode pic X(200) Ws-national pic N(600)

- 让Ws-Unicode中的值为これらの変更は。从java结束。

将国家(Ws-unicode,1208)的国家功能移至Ws-national。

- 转换后的价值就像これらの変更は@。

我不想在转换后添加额外的@字符。

请帮我找出可能的解决方案,我试图取代N' @'使用inspect子句的空间。 它运行良好,但在某些特定情况下失败,例如我们在用户端输入@。在这种情况下,正版@也转换为空间。

2 个答案:

答案 0 :(得分:3)

下面是我用来将EBCDIC转换为UTF的代码片段。在我捕获字符串长度之前,我还得到了@ symbols:

STRING                                                       
   FUNCTION DISPLAY-OF (                                     
      FUNCTION NATIONAL-OF (                                 
         WS-EBCDIC-STRING(1:WS-XML-EBCDIC-LENGTH)
         WS-EBCDIC-CCSID                                     
      )                                                      
      WS-UTF8-CCSID                                          
   )                                                         
   DELIMITED BY SIZE                                         
INTO WS-UTF8-STRING
     WITH POINTER WS-XML-UTF8-LENGTH                         
END-STRING                                                   

SUBTRACT 1 FROM WS-XML-UTF8-LENGTH    

此代码的作用是将EBCIDIC字符串的UTF8表示字符串转换为另一个变量。 WITH POINTER子句将捕获字符串+ 1的新长度(+ 1,因为指针在字符串结束后定位到下一个位置)。

使用此方法,您应该能够准确知道第二个字符串的长度,并使用具有确切长度的字符串。

那应该删除不需要的@s。

修改

有一件事我忘了提及,就我而言,在查看大型机上的实际十六进制时,@符号实际上是EBCDIC低值

答案 1 :(得分:-1)

使用反向检查并在第一次出现@

后停止