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

how to remove @ character from national data type in cobol

我在将 Unicode 数据转换为国家字符时遇到问题。 当我使用 national-of 函数将 Unicode 数据转换为国家时,在字符串后附加了一些垃圾字符,如 @。

例如 Ws-unicode 图片 X(200) ws-national pic N(600)

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

将函数 national-of ( Ws-unicode ,1208 ) 移动到 Ws-national。

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

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

请帮助我找出可能的解决方案,我尝试使用 inspect 子句将 N'@' 替换为 space。 它运行良好但在某些特定情况下失败,例如如果我们从用户端输入@。在那种情况下,真正的 @ 也转换为 space.

在第一次出现@

后使用反向检查和停止

下面是我用来将 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 低值