如何从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 低值
我在将 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 低值