Cobol 替换所有模式匹配

Cobol REPLACING ALL pattern matching

我正在转换一些遗留的 COBOL 代码,遇到了这样的语句:

INSPECT WS-LOCAL-VAR REPLACING ALL X'0D25' BY ' '

我知道 INSPECT...REPLACING ALL 语句将查看 WS-LOCAL-VAR,匹配模式 X'0D25' 并将其替换为 space。

我不明白'0D25'之外的X的用途。我在网上找到的所有 REPLACING ALL 示例都只使用 char 文字进行模式匹配。

X 如何影响被替换的模式?

COBOL 在 EBCDIC 机器上 运行,输入文件来自 Windows 机器。

Cobol 运行 是否在 EBCDIC 机器(大型机/AS400)上并且文件来自 Windows机器 ???。

Ebcdic 只有一个行尾字符 x'25' 与 ascii 中的 2 (\r, \n) 相对。 X'0D25'Windows End-of-Line Marker 的 Ebcdic 表示\r\n。在 Ebcdic 中,0D 不是有效字符。

问题的可能来源:

  • 传输到大型机/AS400 时 Windows 文本文件的转换不佳。
  • Java(可能还有其他现代语言)Windows。 Java on windows 支持使用其标准编写器编写 Ebcdic 文本文件。但是在 Windows 上,Java 坚持写 \r\n 即使 \r不是有效的 EBCDIC 字符,您会得到包含 x'0D25' 的损坏文件。
  • 如果您将硬编码 \r\n 的程序移动到大型机并 运行 它,您也会在文件中得到 x'0d25'。

X表示字符串中的字符是十六进制的。在这种情况下,X"0D" 表示 return 回车符,X"25" 表示 % 符号(假设是 ASCII 系统)。

类似的符号用于指示国家字符串 (N" こんにちは") 和 boolean/bit 字符串 (B"0101010") 及其各自的十六进制等效项(NX"01F5A4"BX"2A").