9.105 GET_KEYWORD_STRING

LANSA

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    値のタイプ:
   A - 英数字
   N - 数値

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