2011-04-19 17 views
1

我想在COBOL中編寫一個函數,用於將字符從PIC X(60)數據類型轉換爲大寫。雖然我知道這樣做的一種方法,但我希望能夠手動檢查字母並添加一個常量,以便從小寫字母轉換爲大寫字母,但似乎無法對PIC X數據類型執行任何算術,除非我將它們重新定義爲別的東西,但是我似乎破壞了原來的X字符。如何在COBOL中的X pic子句中執行算術

有人可以給我一個例子,給出一個PIC X變量,你可以增加1個字母(即a - > b,d - > e ...等)。換句話說,我希望能夠1添加到這個變量:

 01 char-temp pic x. 

感謝,

伊萬

+1

我強烈建議你學習COBOL並停止嘗試用它來做「C」事情。這不是COBOL的工作原理。 – 2011-04-19 19:12:30

+0

爲什麼你會認爲'PIC'類型是編碼的,以便添加一個常量就足以將字符大寫?即使它是一個簡單的字符串,沒有任何實現添加的頭部或尾部,您仍然可以處理編碼爲「UTF-16」或「EBCDIC」的字符。 – 2011-04-19 21:21:05

回答

1

你可能是頑皮和使用重新定義例如:

 01 char-temp pic x. 
     01 char-temp9 pic 99 comp-x redefines char-temp. 

     move 65 to char-temp9 
     display char-temp 

或使用參考修改:

 01 char-temp pic x. 
     01 char-temp9 pic 99 comp-x. 

     move 65 to char-temp9 
     move char-temp9(1:length of char-temp9) to char-temp 

     display char-temp 

我相信他們也是其他方法...

0

單個字符通常需要一個字節的內存。標準COBOL沒有一個字節的二進制數字數據類型(注意:PIC 9 USAGE DISPLAY是數字的字符表示,而不是數字的二進制表示)。所以,在COBOL中對單個字符進行二元arithemetic是不適合你的。

即使您可以對字符執行arithementic,您可能會對字符的二進制表示做出錯誤的假設 - 字母'b'不一定等於'a'的二進制表示加1(它可能會工作對於ASCII而不是EBCDIC)。

最後,如果您要替換另一個字符,您應該調查COBOL INSPECT語句。不像bit twiddling,INSPECT是完全便攜的。

1

通過這種方式進行案例摺疊通常是一個非常糟糕的主意,它實際上只適用於7位ASCII。你問的是可能的,甚至很容易做到,但我會提到一些其他方法來首先大寫數據。

最簡單的方法:

Move function upper-case(my-src-field) To my-tgt-field 

非常簡單的方法:

Inspect my-field 
    converting 'abc...z' to 'ABC...Z' 
End-Inspect 

硬盤的方式,來添加一個01炭火溫度PIC X:

01 my-working-storage. 
    02 char-temp-area. 
    03 filler pic x. 
    03 char-temp pic x. 
    02 char-temp-9 redefines char-temp-area pic s9(4) comp 

然後,您可以:

Move 'A' to char-temp 
Add +1 to char-temp-9 

炭火溫度將包含 'B'。正如其他人所提到的,Cobol對於單字節二進制數學並不好,所以你必須讓你的字符適合二進制數的低字節,在這種情況下是2字節的二進制數。