Cobol替换所有模式匹配

时间:2016-05-06 16:56:21

标签: cobol

我正致力于转换一些旧版COBOL代码并遇到如下声明:

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

据我所知,INSPECT ... REPLACING ALL语句将通过WS-LOCAL-VAR查看,匹配模式X' 0D25'并用空格替换它。

我不明白的是' 0D25'以外的X的目的。我在网上找到的所有替换所有例子都不会使用除字母之外的任何内容进行模式匹配。

X如何影响替换哪些模式?

COBOL正在EBCDIC计算机上运行,​​输入文件来自Windows计算机。

2 个答案:

答案 0 :(得分:4)

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

类似的表示法用于表示国家字符串(N" こんにちは")和布尔/位字符串(B"0101010")及其各自的十六进制等值(NX"01F5A4"BX"2A")。

答案 1 :(得分:2)

Cobol是否在 EBCDIC 计算机(Mainframe / AS400)上运行,并且该文件来自 Windows计算机 ???。

Ebcdic只有一个行尾字符 x'25'与ascii中的2(\ r,\ n)相对应。 X'0D25' Windows 行尾标记 \ r \ n 的Ebcdic表示形式。在Ebcdic中,0D不是有效字符。

可能是问题的根源:

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