9.105 GET_KEYWORD_STRING
1つのESF (外部ソース形式)ステートメントが含まれる文字列から、キーワードとその値を取得します。
各製品の対応
LANSA/AD |
使用可 |
RDMLXでは使用不可 |
Visual LANSA for Windows |
未対応 |
|
Visual LANSA for Linux |
未対応 |
引数
番号 |
タイプ |
必須/任意 |
記述 |
最小長 |
最大長 |
最小小数桁数 |
最大小数桁数 |
---|---|---|---|---|---|---|---|
1 |
L |
必須 |
キーワードどその値を取得するための文字列の「行」を含める作業リスト。このリストは全体で1000文字の制限があります。 |
1 |
256 |
||
2 |
N |
必須 |
キーワードどその値を取得するための文字列の「行」を含める作業リストのエントリー長 |
1 |
3 |
0 |
0 |
3 |
A |
必須 |
処理されるESFステートメントのタグ名(コマンド名) |
1 |
10 |
||
4 |
L |
必須 |
検索用のキーワード作業リスト 呼び出し元のRDMLファンクションは、項目の長さの合計が正確に16バイトの作業リストを提供しなければなりません。 リストの各エントリーは、次のようなフォーマットにする必要があります。 開始 - 終了 説明 1 - 15 キーワード 16 - 16 値の数: S - 1つの値 L - 値のリスト |
16 |
16 |
戻り値
番号 |
タイプ |
必須/任意 |
記述 |
最小長 |
最大長 |
最小小数桁数 |
最大小数桁数 |
---|---|---|---|---|---|---|---|
1 |
L |
必須 |
検索されたキーワードを含める作業リスト 呼び出し元のRDMLファンクションは、項目の長さの合計が正確に25バイトの作業リストを提供しなければなりません。 リストの各エントリーは、次のようなフォーマットにする必要があります。 開始 - 終了 説明 1 - 15 キーワード 16 - 20 キーワードの1番目の値のリスト・エントリー番号。Signed(5,0) 21 - 25 キーワードの最後の値のリスト・エントリー番号。Signed(5,0) |
25 |
25 |
||
2 |
L |
必須 |
検索された値を含める作業リスト 呼び出し元のRDMLファンクションは、項目の長さの合計が正確に131バイトの作業リストを提供しなければなりません。 リストの各エントリーは、次のようなフォーマットにする必要があります。 開始 - 終了 説明 1 -
1 値のタイプ: 2 - 101 英数字値。注:英数字値は必ず引用符で囲まれます。 102 - 131 数値 注:数値リテラルの値は、Signed(30,9)です。 |
131 |
131 |
||
3 |
L |
必須 |
検索された文字列から検索キーワードとその値を除いた残りの部分を含める作業リスト リストの各エントリーは、次のようなフォーマットにする必要があります。 開始 - 終了 説明 1 - 2 エラー・コード。エラー・コード一覧は以下にあります。 3 - 22 認識されなかった文字列の最初の20文字 |
1 |
22 |
エラー・コード
01 |
タグの開始区切り文字がコロンではありませんでした |
02 |
タグ名が英字で開始されていません |
03 |
タグ名が長すぎます。10文字以下にする必要があります |
04 |
キーワードが英字で開始されていません |
05 |
キーワードが無効です。定義されたキーワード・リストに見つかりません |
06 |
キーワードが完全ではありません。文字列の終わりが見つかりました |
07 |
キーワードの指定が長すぎます。15文字以下にする必要があります |
08 |
キーワードに値が指定されていません |
09 |
指定された値が長すぎます |
10 |
1つの値リストに複数の値が指定されています |
11 |
引用された値が引用符で終わっていません |
12 |
無効な数値リテラル値です |
13 |
値に複数の10進数形式の文字が指定されています |
14 |
数値リテラル値の整数部が21桁を超えています |
15 |
数値リテラル値の小数部が9桁を超えています |
16 |
コマンド文字列が上限の1000文字を超えています |
17 |
タグの終了区切り文字が指定されていません |
18 |
値が完全ではありません。文字列の終わりが見つかりました |
19 |
予期したタグ名が見つかりません |
20 |
引用された値の後はブランクにする必要があります |
21 |
キーワードの終了を表す関係子が指定されていません |
22 |
キーワードが複数回指定されています |
技術ノート
· 戻されたキーワード・リストには、検索された各キーワードに1つのエントリーが入っています。キーワードの順序はキーワード検索用のリストに指定された順です。キーワードが見つからない場合は、そのキーワードの1番目の値のリスト・エントリー番号は0になります。
· キーワード検索用の作業リストに指定されたキーワードやESFステートメント内で指定されたキーワードはすべて大文字であることを確認してください。
· 戻り値リストの英数字値は、値が英字でも数字でも必ずこの場所に設定されます。数値は、その値が数値の場合だけ、ゼロ以外の数値になります。
· 小文字を含む英数字値が引用符で囲まれてない場合、大文字に変換されます。
· 英数字値では引用符の中に引用符を組み込んではいけません。
· 英数字値の長さの上限は98です。英数字はすべて引用符で囲まれて戻されます。
· 戻された残りのリストの文字列には、エラーが発生した検索文字列が入ります。
例
ESFスタイルのステートメントが入ったリストが作られました。これはRECORDステートメントであることがわかっています。FILENAMEの値、つまりキーワードの値が1つ必要です。
DEFINE FIELD(#KWD) TYPE(*CHAR) LENGTH(10)
DEFINE FIELD(#KWDTYPE) TYPE(*CHAR) LENGTH(1)
DEFINE FIELD(#LINE) TYPE(*CHAR) LENGTH(70)
DEFINE FIELD(#KWDSTR) TYPE(*DEC) LENGTH(3) DECIMALS(0)
DEFINE FIELD(#KWDEND) TYPE(*DEC) LENGTH(5) DECIMALS(0)
DEFINE FIELD(#VALTYPE) TYPE(*CHAR) LENGTH(1)
DEFINE FIELD(#VALALPHA) TYPE(*CHAR) LENGTH(50)
DEFINE FIELD(#VALNUM) TYPE(*DEC) LENGTH(30) DECIMALS(0)
DEFINE FIELD(#FILENAME) TYPE(*CHAR) LENGTH(10)
DEFINE FIELD(#LEFTCOUNT) TYPE(*DEC) LENGTH(5) DECIMALS(0)
DEF_LIST NAME(#KWDSRCH) FIELDS((#KWD) (#KWDTYPE))
TYPE(*WORKING)
DEF_LIST NAME(#STRSRCH) FIELDS((#LINE)) TYPE(*WORKING)
DEF_LIST NAME(#KWDFND) FIELDS((#KWD) (#KWDSTR) (#KWDEND)
TYPE(*WORKING)
DEF_LIST NAME(#VALFND) FIELDS((#VALTYPE) (#VALALPHA)
(#VALNUM)) TYPE(*WORKING)
DEF_LIST NAME(#STRLEFT) FIELDS((#LINE)) TYPE(*WORKING)
COUNTER(#LEFTCOUNT)
********** Construct list containing ESF:RECORD statement
. . . . . . . . . . . . . . . .
********** Clear the keyword search list
CLR_LIST NAMED(#KWDSRCH)
********** Put in search keywords
CHANGE FIELD(#KWD) TO(FILENAME)
CHANGE FIELD(#KWDTYPE) TO(S)
ADD_ENTRY TO_LIST(#KWDSRCH)
********** Get the keywords from the string
USE BUILTIN(GET_KEYWORD_STRING) WITH_ARGS(#STRSRCH #KWDSTR #KWD
#KWDSRCH) TO_GET(#KWDFND #VALFND #STRLEFT)
********** Handle error
IF COND('#LEFTCOUNT > 0')
********** error processing
. . . . . . . . . . . . . . . .
ELSE
********** Get the value for the file name keyword
GET_ENTRY NUMBER(1) FROM_LIST(#VALFND)
GET_ENTRY NUMBER(#KWDSTR) FROM_LIST(#VALFND)
CHANGE FIELD(#FILENAME) TO(#VALALPHA)
********** Use the file name
. . . . . . . . . . . . . . . .
ENDIF