2016-05-06 65 views
0

我正在將一些舊的COBOL代碼和跨越這樣的聲明是:的Cobol替換所有的模式匹配

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

據我所知,INSPECT ...更換所有語句將期待通過WS-LOCAL -VAR,匹配模式X'0D25'並將其替換爲空格。

我不明白的是'0D25'之外的X的目的。我在網上找到的所有REPLACING ALL的所有示例都不使用char字面以外的任何其他字符來進行模式匹配。

X如何影響哪些模式被替換?

COBOL在EBCDIC機器上運行,輸入文件來自Windows機器。

+0

我假設「X」告訴你文字被解釋爲十六進制字符碼。我不知道OP的貢獻。 –

+0

我找到了一個有更多COBOL經驗的同事,並確認你是正確的,它基於十六進制代碼'0D25'的字符匹配(我在問題中寫錯了) – arseniy

+0

不客氣: - } –

回答

2

是一個EBCDIC機(主機/ AS400)上運行的COBOL和來自Windows計算機 ???來的文件。

Ebcdic只有一個行尾字符x'25'與ascii中的2(\ r,\ n)相同。 X'0D25'的Windows結束行標記\ r \ n的EBCDIC表示。在Ebcdic 0D不是一個有效的字符。

問題的可能來源:當轉移到主機/ AS400在Windows文本文件的

  • 可憐的轉換。
  • Java(可能還有其他現代語言)在Windows上。 Windows上的Java支持使用其標準編寫器編寫Ebcdic文本文件。但是在Windows上,Java堅持要編寫\ r \ n,即使\ r不是有效的EBCDIC字符而且您將得到包含x'0D25'的損壞文件。
  • 如果您將硬編碼爲\ r \ n的程序移動到大型機並運行它,您還將在文件中獲得x'0d25'。
+0

EBCDIC x' 0D'仍然是CR字符。這聽起來像文件傳輸不能正確轉換來自源系統的行尾,但它正在將X'0A'LF字符轉換爲EBCDIC等效的X'25'。 –

4

X表示字符串中的字符是十六進制的。在這種情況下,X"0D"表示回車字符和X"25"%符號(假定爲ASCII系統)。

類似的符號用於標明國家字符串(N" こんにちは")和布爾/位串(B"0101010")和它們各自的十六進制當量(NX"01F5A4"BX"2A")。