Cobol替换所有模式匹配
我正在转换一些遗留COBOL代码,遇到了如下语句:Cobol替换所有模式匹配,cobol,Cobol,我正在转换一些遗留COBOL代码,遇到了如下语句: INSPECT WS-LOCAL-VAR REPLACING ALL X'0D25' BY ' ' 我知道INSPECT…replacement ALL语句将检查WS-LOCAL-VAR,匹配模式X'0D25'并用空格替换它 我不明白的是“0D25”之外的X的用途。我在网上找到的所有替换示例都只使用char文本进行模式匹配 X如何影响被替换的图案 COBOL正在EBCDIC计算机上运行,输入文件来自Windows计算机。是在EBCDIC计算机
INSPECT WS-LOCAL-VAR REPLACING ALL X'0D25' BY ' '
我知道INSPECT…replacement ALL语句将检查WS-LOCAL-VAR,匹配模式X'0D25'并用空格替换它
我不明白的是“0D25”之外的X的用途。我在网上找到的所有替换示例都只使用char文本进行模式匹配
X如何影响被替换的图案
COBOL正在EBCDIC计算机上运行,输入文件来自Windows计算机。是在EBCDIC计算机(大型机/AS400)上运行的COBOL,是来自Windows计算机的文件 Ebcdic只有一个与ascii中的2(\r\n)对应的行尾字符x'25'X'0D25'是窗口的Ebcdic表示形式行尾标记\r\n。在Ebcdic中,0D不是有效字符 问题的可能来源:
- 将Windows文本文件传输到大型机/AS400时转换不良
- Windows上的Java(可能还有其他现代语言)。windows上的Java支持使用其标准编写器编写Ebcdic文本文件。但在Windows上,Java坚持写入\r\n,即使\r不是有效的EBCDIC字符,并且您会收到包含x'0D25'的损坏文件
- 如果您将硬编码的程序移动到大型机并运行,您还将在文件中获得x'0d25'
- 将Windows文本文件传输到大型机/AS400时转换不良
- Windows上的Java(可能还有其他现代语言)。windows上的Java支持使用其标准编写器编写Ebcdic文本文件。但在Windows上,Java坚持写入\r\n,即使\r不是有效的EBCDIC字符,并且您会收到包含x'0D25'的损坏文件
- 如果您将硬编码的程序移动到大型机并运行,您还将在文件中获得x'0d25'
- Cobol是否在EBCDIC计算机(大型机/AS400)上运行,文件是否来自Windows计算机
Ebcdic只有一个与ascii中的2(\r\n)对应的行尾字符x'25'X'0D25'是窗口的Ebcdic表示形式行尾标记\r\n。在Ebcdic中,0D不是有效字符
问题的可能来源:
X“0D”
表示回车符,X“25”
表示%符号(假定为ASCII系统)
类似的符号用于表示国家字符串(N“
こんにちは"
)和布尔/位字符串(B“0101010”
)及其各自的十六进制等价物(NX“01F5A4”
和BX“2A”
)。X>表示字符串中的字符是十六进制的。在这种情况下,X“0D”
表示回车符,X“25”
表示百分号(假设使用ASCII系统)
类似的符号用于表示国家字符串(N“
こんにちは“
)和布尔/位字符串(B“0101010”
)及其各自的十六进制等价物(NX“01F5A4”
和BX“2A”
)。正在告诉您文字被解释为十六进制字符代码。我不知道OP有什么作用。我找到了一位有更多COBOL经验的同事,并确认您是正确的,它基于十六进制代码“0D25”的字符匹配(我在问题中写错了)。我假设“X”正在告诉您文字被解释为十六进制字符代码。我不知道OP有什么作用。我找到了一位有更多COBOL经验的同事,并确认您是正确的,它基于十六进制代码“0D25”的字符匹配(我在问题中写错了)EBCDIC x'0D'仍然是CR字符。听起来文件传输没有正确转换源系统的行尾,但它正在将x'0A'LF字符转换为EBCDIC等效的x'25。EBCDIC x'0D'仍然是CR字符。听起来文件传输没有正确转换源系统的行尾,但它正在将X'0A'LF字符转换为EBCDIC等效的X'25'。