最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

6.5.API基礎講座5 総称見出しからのデータの取り出し

[ Previous ] [ HOME ] [ Upper ] [ Next ]


まず、マニュアルを見てみましょう。

5.48.7 ユーザー空間の検索 (QUSRTVUS) API

パラメーター 
   
 必須パラメーター・グループ:  
  
    1   ユーザー空間修飾名    入力     Char(20) 
    2   開始位置              入力     Binary(4)
    3   データの長さ          入力     Binary(4)
    4   レシーバー変数        出力     Char(*)  

 任意選択パラメーター:

    5   エラー・コード       入出力   Char(*) 
         

ユーザー空間の検索 (QUSRTVUS) API によって、ユーザー空間の内容を検索することができます。QUSRTVUS API は、そのサイズなど、ユーザー空間オブジェクトに関する記述情報を検索するものではありません。ユーザー空間の属性に関する情報を検索するには、トピック5.48.8の『ユーザー空間属性の検索(QUSRUSAT) API』を参照してください。

注:  QUSRTVUS API の開始位置を決定するためには、オフセット値に 1 を加算しなければなりません。開始位置が 0 であるオフセット値を使用する OS/400 リスト API とは対照的に、QUSRTVUS API では 1 から始まる値が使用されます。QUSRTVUS API では、ユーザー空間の最初の文字は位置 1 に置かれます。

単純に言えば、ユーザー・スペースの、どこから、何バイト読むのかを指定すると、その内容が指定した長さ分、戻されるのです。

よく、わからなくなるのは、総称見出しの何バイトからどれくらいを取り出すのか、という点です。この際、じっくり見ておきましょう。

というわけで、ここでQUSRTVUSのRPGソースを掲載します。注に出ているオフセット+1は覚えておかないと、うまくいきませんよ!
下記は「総称見出し」からデータを取り出す例です。

     H            Y/                                    1
     I******************************************************
     I*     D E F I N E    D A T A  - S T R U C T U R E    *
     I******************************************************
     IUSRSPC      DS
     I                                        1  10 USNAME
     I                                       11  20 USLIB
     IGENHED      DS
     I                                    B   1   40DTLOFS
     I                                    B   5   80LSTSIZ
     I                                    B   9  120NOENTH
     I                                    B  13  160DTLSIZ
     I            DS
     I                                    B   1   40USSIZE
     I                                    B   5   80LENDTA
     I                                    B   9  120STRPOS
     C******************************************************
     C*             M A I N -  R O U T I N E               :
     C******************************************************
     C*                                                    :
     C*総称見出しからデータを取り出す                      :
     C*                                                    :
     C                     CALL 'QUSRTVUS'             95  :
     C                     PARM           USRSPC           :
     C                     PARM 125       STRPOS           :
     C                     PARM 16        LENDTA           :
     C                     PARM           GENHED           :
     C*                                                    :
     C                     MOVE *ON       *INLR            :
     C                     RETRN                           :
    
解説    

総称見出しのレイアウトを見てください。オフセットは16進数の部分省略。(総称見出し全体のレイアウトはこちらです。)

オフセット10 進数

タイプ

フィールド

サンプルRPGのフィールド名
124 BINARY(4) リスト・データ・セクションのオフセット DTLOFS
128 BINARY(4) リスト・データ・セクションのサイズ(※あまり使いません) LSTSIZ
132 BINARY(4) リスト項目の数 NOENTH
136 BINARY(4) 各項目のサイズ DTLSIZ

STRPOSに125をセットして、LENDTAに16をセットしているのは、

  • オフセット10進数124を始めとして(だから124 + 1で125
  • 長さ4バイトのフィールドを4っつなので16バイト分

を取り出そうとしてるからです。上記のRPGで、DSのGENHEDに、125桁めから16バイトのデータが、セットされています。このGENHEDはDSで、

  1. DTLOFS
  2. LSTSIZ
  3. NOENTH
  4. DTLSIZ

に分解されます。(バイナリ定義のフィールド)。この4つが、上記の表に該当します。ここに、この後参照する、リストセクションの大事な情報が入っているのです。

もし、「見出しセクション」も見るのならば、STRPOSには、116+1で117が入って、LENDTAは4X6=24バイトとなります。
簡単でしょう?

よく分かる!これがユーザースペースだ

 api_usrspc.gif (44899 バイト)

 


[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送