2017-01-26 10 views
0

これは可能ではないことを何年にもわたって検索してもかなり確かですが、とにかく尋ねます。AS400 RPGLE /操作中のフリー・ダイナミック変数

問題は、フィールド名がわからないときに操作で動的変数を使用できるかどうかです。たとえば、私は数百のフィールドを含むデータ構造を持っています。オペレータはこれらのフィールドの1つを選択し、プログラムは渡されたデータ構造からフィールドにどのデータが存在するかを知る必要があります。それで、100のフィールドがあり、フィールド50はオペレータが操作を選択したものです。プログラムは、FLDNAM変数のフィールド名(field50)で渡されます。プログラムは通常の方法でこれを読んでいます:

/free 
    if field50 = 'XXX' 
    // do something 
    endif; 
/end-free 

問題は、すべての操作でこれを100回コーディングしなければならないということです。例:

/free 
    if fldnam = 'field1'; 
    // do something 
    elseif fldnam = 'field2'; 
    // do something 
    .. 
    elseif fldnam = 'field50'; 
    // do something 
    endif; 

未知のフィールドで操作を実行する方法はありますか。 (つまり、FLDNAM(ポインタデータ)=「XXX」の場合は何かを実行します)

+2

RPGは厳密に型指定された言語です。フィールドは事前に定義されていなければなりません。フィールドの名前は、動的に取得または指定できる方法では決してプログラムには認識されません。配列を使用できますか、またはフィールドがすべて異なっていますか? – jmarkmurphy

+0

こんにちは。応答してくれてありがとう。私は必要に応じて、高速処理のためだけに配列を使用することを考えた。私は、フィールド名の配列だけでなく、データ領域を読み込むことになるだろうし、同様に位置配列。このコードはメンテナンスが非常に複雑になる可能性がありますが、動的変数を使用できない場合のバックアップ計画です。すべてのフィールドは長さが異なり、いくつかはパックされた10進数などです。配列を使用することは可能ですが、他のオプションがあるかどうかを確認して確認します。 – user1420914

+0

これは絶対に行うことができます。クエリを考えてみましょう。あなたが始める前にあなたが望むフィールドが分​​かっていますか?フィールドを選択する手助けはできますか? – danny117

答えて

3

データ構造は、外部記述であり、あなたは、あなたがオフセット、長さ、およびデータ構造体のフィールドの種類を見つけるためにQUSLFLD APIを使用することができますどのファイルそれはから来て、知っている場合は、部分文字列を使用してデータを取得し、データ型に応じて他の計算を使用して値を取得します。

+0

私はREXXがおそらくそれを行うことができたとしても、答えとしてこれを追加しました。私はしかし、この1つに似た解決策で行くことになった。私はすでにデータ、長さなどの位置をリストしたファイルを持っています。基本的には問題のファイルのDSPFFDだけです。これらの値を配列にロードし、その場でデータを連結し、プログラムに送信されたフィールドに基づいて置換します。私が想像したよりも簡単で、想像以上にコードが少なくなっていました。良いことです、私は別のプログラミング言語を学ぶには年をとっています。 :) – user1420914

1

単純な回答、いいえ。

RPGは単純にそのために設計されていません。言語はほとんどありません。

スクリプト言語を調べることができます。例えばPerlは、オンザフライで評価することができます。 IBM iにインストールされるREXXには、INTERPRETというキーワードがあります。

REXX Reference manual

関連する問題