2016-07-21 4 views
1

CALLステートメントの文字列リテラルを引数として渡そうとしています。リテラルはCALL文の引数としてどのように扱われますか?

CALL "SOMEPROGRAM" USING "SomeStringLiteralArg" 

私はと呼ばれるサブプログラムに連動アイテムとして引数を定義する必要があります動作することを

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

が、私は20文字より短い文字列リテラルを渡すとき、ランタイムが文句を開始します。

対応するリンケージアイテムよりも小さいUSINGアイテム(#1)が渡されました。

指定された文字列リテラルは20文字でなければなりません。しかし、私は、引数として文字列リテラルに合格するための理由があります

  • 私はプログラムに渡す各項目のための一時的な変数を定義するのが面倒です。 私はプログラムに渡す各アイテムのワーキングストレージに異なる長さの100個の「一時的な」変数を持つと、プログラムが不必要に乱雑になります。私の質問の

    CALL "SOMEPROGRAM" USING "shortStrLit   " 
    

一つはある、またはコース:

MOVE "ShortStrLit" TO SOME-TEMP-VAR 
CALL "SOMEPROGRAM" USING SOME-TEMP-VAR 
  • 私は手動でもパッドが文字列リテラルが必要な20文字の長さに一致するようにする必要はありませんどのようにすることができます私はCALLステートメントの引数としてリテラルを渡しますか?しかし、さらに重要なのは、根本的な問題は次のとおりです。CALLステートメントの引数としてリテラルが渡される方法は?たとえば、9を渡すと、内容が "9"の文字列として解釈されるのですか、またはコンパイル時に整数に変換されますか?


    私は、Windows 10上で、ここで

  • +0

    コンパイラやOS、してください。メッセージの完全な参照(メッセージ番号がある場合)。 AcuCOBOLですか? http://community.microfocus.com/microfocus/cobol/extend_and_acucobol/w/knowledge_base/17365.item-passed-smaller-than-linkage-section-item.aspx –

    +2

    あなたは今まで、唯一の人であることを行っている場合は、そのプログラムに取り組んで、あなたが好むほど怠惰であることを自由に感じてください。あなたがプログラムを見て次回に質問をすることはありません。もしそうでなければ、将来他の誰かがプログラムを見ているとすれば、私はそれに反対するでしょう。あなたの怠惰は、誰かがプログラムを見るたびに、他の誰かの余分な時間です。 –

    +1

    手続き部を介して散らばっているリテラルは、(自分自身で定義された使用を超えて、1つの記録を追加するなど)悪い考えです。なぜデータ定義でVALUE句を使用できないのですか?あなたのエディタを習得するだけで、タイピングはそれほどありません。 COBOLには「文字列」がないことを忘れないでください。使用しているコンパイラのドキュメントを見てください.CALLのUSINGのリテラルは、 "Extensions"の領域です。 –

    答えて

    5

    二つの質問マイクロフォーカスACUCOBOL-GT 9.2.4を実行している:

    まず - どのように私は、英数字リテラルを渡す必要があります: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は任意の長さをサポートします。 isCobolは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"が値を取得する方法を表示できますか? –

    関連する問題