2016-04-13 20 views
1

私は、私が書いたプログラムのテストドライバーに何が起きているのかを見るためにディスプレイを置いています。私の場合は、PIC Nフィールドを含むコピーブックを使って作業しています。 私は以下のフィールドを表示したいと考えています:05 MESSAGE-TEXT PIC N(20).どのように国のフィールドをコボルに表示できますか?

普通のDISPLAY MESSAGE-TEXT IN COPYBOOKは読めません。たとえば、PIC-X-FIELDのような新しいフィールドを定義してMOVE FUNCTION DISPLAY-OF (MESSAGE-TEXT IN COPYBOOK) TO PIC-X-FIELDを使用し、そのPIC-X-FIELDの表示を行う必要がありますか?それとも簡単な方法がありますか?

+0

ハハはい、申し訳ありませんが、私は明らかにすべきでした:私はそれを読むことができません、そして、私が16進数をオンにするとき、それはたくさんの不器用さを示します。私は、コピーブックで使用されるフィールドを指定するためにINを使用しています。 – Lena

答えて

3

出力に16進数のナショナル(PIC N)フィールドを表示したときに見えないのは、そのナショナルフィールドの16進値です。このフィールドのUTF-8値です。 「普通の」文字の場合は、1バイトのバイナリ・ゼロが続き、その後に文字の「ASCII」コードが続きます。

たとえば、大文字の "A"はX'0041 'になります。

ナショナルフィールドを使用する場合、ほとんどの場合、FUNCTION NATIONAL-OFを使用して変換を行う必要はありません。たとえば、PIC XからPIC Nへの単純なMOVEの場合、コンパイラは必要なものを認識し、変換を実行するために必要なコードを生成します。

変換が自動で行われない場所は、DISPLAYです。

しかし、DISPLAYでできることは、出力を得るためにFUNCTION DISPLAY-OF(...)を使用することです。

WORKING-STORAGE SECTION. 
    01 W-WHEN-COMPILED      PIC X(8)BX(8). 
    01 A-NATIONAL       PIC N(1) VALUE "A". 
    01 A-DISPLAY       PIC X VALUE "?". 
    PROCEDURE DIVISION. 
     MOVE WHEN-COMPILED   TO W-WHEN-COMPILED 
     DISPLAY "PROGRAM-NAME COMPILED ON " W-WHEN-COMPILED 

     DISPLAY 
       FUNCTION WHEN-COMPILED 
     DISPLAY 
       "DATE COMPILED (YYYY-MM-DD): " 
       FUNCTION WHEN-COMPILED (1 : 4) 
       "-" 
       FUNCTION WHEN-COMPILED (5 : 2) 
       "-" 
       FUNCTION WHEN-COMPILED (7 : 2) 
       " TIME: " 
       FUNCTION WHEN-COMPILED (9 : 2) 
       ":" 
       FUNCTION WHEN-COMPILED (11 : 2) 
       ":" 
       FUNCTION WHEN-COMPILED (13 : 2) 
       " OFFSET TO GMT:" 
       FUNCTION WHEN-COMPILED (17 : 5) 
     PERFORM      DO-THE-DISPLAYS 

     ACCEPT A-DISPLAY 
     MOVE A-DISPLAY    TO A-NATIONAL 
     PERFORM      DO-THE-DISPLAYS 
     ACCEPT A-DISPLAY 
     MOVE FUNCTION NATIONAL-OF 
      (A-DISPLAY)   TO A-NATIONAL 
     PERFORM      DO-THE-DISPLAYS 


     GOBACK 
     . 
    DO-THE-DISPLAYS. 
     DISPLAY 
       "THE NATIONAL, NATIVE>" 
       A-NATIONAL 
       "<" 
     DISPLAY 
       "THE DISPLAY, NATIVE >" 
       A-DISPLAY 
       "<" 
     DISPLAY 
       "THE DISPLAY-OF FUNC >" 
       FUNCTION DISPLAY-OF 
       (A-NATIONAL) 
       "<" 
     . 

一部JCLはそれを実行する:

//stepname EXEC PGM=program,TIME=(,2) nice to limit things always 
//STEPLIB DD DISP=SHR,DSN=your executable library 
//SYSOUT DD SYSOUT=* 
//SYSIN DD * 
C 
D 

ここ

は上記を示すショートプログラム(またの別の使用を示すディスプレイと、参照修飾、FUNCTION)です出力は次のとおりです。国立のための六角で

04/13/16 09.28.21               
2016041309282183+0000              
DATE COMPILED (YYYY-MM-DD): 2016-04-13 TIME: 09:28:21 OFFSET TO GMT:+0000 
THE NATIONAL, NATIVE> <             
THE DISPLAY, NATIVE >?<             
THE DISPLAY-OF FUNC >A<             
THE NATIONAL, NATIVE> <             
THE DISPLAY, NATIVE >C<             
THE DISPLAY-OF FUNC >C<             
THE NATIONAL, NATIVE> <             
THE DISPLAY, NATIVE >D<             
THE DISPLAY-OF FUNC >D< 

THE NATIONAL, NATIVE> < 
ECC4DCECDDCD64DCECEC6044 
385051396513B0513955E01C 
----------------------- 
THE NATIONAL, NATIVE> < 
ECC4DCECDDCD64DCECEC6044 
385051396513B0513955E03C 
----------------------- 
THE NATIONAL, NATIVE> < 
ECC4DCECDDCD64DCECEC6044 
385051396513B0513955E04C 

注:FUNCTION WHEN-COMPILEDの出力は異なる場合がありますが、OS/390およびVM用のCOBOLで使用したことはありません。また、日付の形式もインストールオプションによって異なる場合があります。

また、FUNCTION DISPLAY-OF(およびNATIONAL-OF)がコードページを2番目の引数として取ることはできません。デフォルトとは異なるコードページでナショナルを必要とした場合(そして、コードページをコンパイラオプションとして指定したくない場合、または同じプログラムで複数のコードページ出力が必要な場合)は、正しい出力を得るための関数のコードページ。このようなケースでは、MOVEなどのデフォルト変換は使用できませんが、関数を使用して明示的に変換する必要があります。

関連する問題