2016-07-21 24 views
1

我想傳遞一個字符串作爲CALL語句的參數。如何處理CALL語句的文字作爲參數?

CALL "SOMEPROGRAM" USING "SomeStringLiteralArg" 

我必須定義的參數作爲調用的子程序聯動項目:

LINKAGE SECTION. 
77 SOME-STRING-ARGUMENT PIC X(20). 

這樣的作品,但是當我通過一個字符串少於20個字符,在運行時就開始抱怨:

通過使用項目(#1)小於相應的LINKAGE項目。

給定的字符串文字長度必須爲20個字符。但也有原因,我傳遞一個字符串文字作爲參數:

  • 我懶得來定義我傳遞給程序的每個項目一個臨時變量。 對於傳遞給程序的每個項目,在工作存儲器中有100個具有不同長度的「臨時」變量會使程序不必要地混亂。

    MOVE "ShortStrLit" TO SOME-TEMP-VAR 
    CALL "SOMEPROGRAM" USING SOME-TEMP-VAR 
    
  • 我也不想手動墊字符串文字匹配的20個字符的所需長度:

    CALL "SOMEPROGRAM" USING "shortStrLit   " 
    

我的一個問題是,或課程:怎麼能我傳遞一個字面作爲CALL聲明的參數?但是,更重要的是,潛在的問題是:如何處理文字作爲處理CALL語句的參數?例如,如果我通過9,它被解釋爲內容爲「9」的字符串,還是編譯時轉換爲整數?


我在Windows上運行的微聚焦ACUCOBOL-GT 9.2.4這裏10

+0

編譯器和操作系統,請。該消息的完整參考(如果有消息編號)。它是AcuCOBOL嗎? http://community.microfocus.com/microfocus/cobol/extend_and_acucobol/w/knowledge_base/17365.item-passed-smaller-than-linkage-section-item.aspx –

+2

如果你打算成爲唯一的人,在這個項目上工作,隨時都可以隨心所欲。下一次看節目時不要問問題。如果不是的話,如果別人將在未來某個時候看這個節目,我會建議反對。每當有人看這個節目時,你的懶惰就是別人的額外時間。 –

+1

通過PROCEDURE DIVISION分散的文字(超出自定義用途,比如ADD 1 TO COUNT-OF-RECORDS)是一個壞主意。爲什麼不能在數據定義上使用VALUE子句。這不是真的打字,只是掌握你的編輯。請記住,或者注意,COBOL沒有「字符串」。查看你正在使用的編譯器的文檔,在CALL上的USING中的文字是「擴展」的區域。 –

回答

5

兩個問題:

首先 - 我應該如何通過字母數字文字:

對於CALL some-cobol-prog USING "alphanumeric literal" COBOL 2002增加了以下內容:

LINKAGE SECTION. 
01 SOME-STRING-ARGUMENT PIC X ANY LENGTH. 

如果你的編譯器沒有支持它,你必須填充文字或使用變量。

二 - 是一個數字字面解釋爲字母:

所有編譯我已經看到了它轉換爲整數 - 如何以及最重要的是什麼類型完全取決於所使用的編譯器...

+0

'ANY LENGTH' - 我的編譯器不支持它,但仍然是,我正在尋找。 (我想我一定會使用一個變量。) –

0

產品圖x任何長度均由isCobol支持。 iscoobol支持acucobol來源的編譯。

我不知道acucobol是否可以支持,但如果可以的話,你可以在鏈接部分定義一個字符串(java.lang.string)。這也得到isCobol的支持。

working-storage section. 
77 SOME-STRING-ARGUMENT PIC X(20). 

linkage section. 
77 this-string object reference j-string. 

procedure dividion using this-string. 
main. 
    set some-string-argument to this-string. 
+0

你能說明「this-string」是如何得到一個值的嗎? –