ノーツ/ドミノの言語

2020-11-04に作成

 ノーツ/ドミノ(Notes/ Domino)で使用する主要な言語にはロータススクリプト(Lotus Script)とロータス式言語(Lotus 式言語、アットマーク関数)があります。ロータススクリプトは VBScript に似たところがある言語です。
 Windows上でノーツ/ドミノ サーバーを動かしていると、管理用のプログラムを VBScript や C# で書くことがあります。
 ここではこれらの言語をとりあげます。

所有者限定モードのためこのボードには投稿できません ボードとは?

Replace, ArrayReplace : 配列の一部を置き換えます

Lotus Script 言語
  • ArrayReplace (元の配列, 置換前の値を含む配列, 置換後の値を含む配列)
  • Replace (元の配列, 置換前の値を含む配列, 置換後の値を含む配列)
  • Replace (元の配列, 置換前の値を含む配列, 置換後の値を含む配列, 文字の開始位置)
  • Replace (元の配列, 置換前の値を含む配列, 置換後の値を含む配列, 文字の開始位置, 置換回数の上限)
  • Replace (元の配列, 置換前の値を含む配列, 置換後の値を含む配列, 文字の開始位置, 置換回数の上限, 比較方法)

比較方法
0 = 大文字小文字、全角半角を区別します
1 = 大文字小文字を区別しません
4 = 全角半角を区別しません
5 = 大文字小文字、全角半角を区別しません

VbScript 言語
  • Replace (元の配列, 置換前の値を含む配列, 置換後の値を含む配列)
  • Replace (元の配列, 置換前の値を含む配列, 置換後の値を含む配列, 文字の開始位置)
  • Replace (元の配列, 置換前の値を含む配列, 置換後の値を含む配列, 文字の開始位置, 置換回数の上限)
  • Replace (元の配列, 置換前の値を含む配列, 置換後の値を含む配列, 文字の開始位置, 置換回数の上限, 比較方法)

評価方法
0 : バイナリーモード
1 : テキストモード(大文字小文字を区別しません)

Lotus 式言語

@Replace (元の配列; 置換前の値を含む配列; 置換後の値を含む配列)

評価方法
大文字小文字を区別します

Instr : 検索する文字列の位置を調べます

Lotus Script 言語

  • Instr (検索する文字列, 検索される文字列)
  • Instr (検索開始位置, 検索する文字列, 検索される文字列)
  • Instr (検索開始位置, 検索する文字列, 検索される文字列, 比較方法)

検索開始位置を省略したときは 1 とみなされます
数値を設定する検索開始位置や比較方法にNULL値を設定するとエラーになります

戻り値
1~ : 検索する文字の位置
0 : 見つからなかった
検索開始位置(初期値は1) : 検索される文字列が空
NULL : NULL値が設定された

評価方法
0 : 大文字小文字、全角半角を区別します
1 : 大文字小文字を区別しません
4 : 全角半角を区別しません
5 : 大文字小文字、全角半角を区別しません

VbScript 言語

  • Instr (検索する文字列, 検索される文字列)
  • Instr (検索開始位置, 検索する文字列, 検索される文字列)
  • Instr (検索開始位置, 検索する文字列, 検索される文字列, 比較方法)

検索開始位置を省略したときは 1 とみなされます
数値を設定する検索開始位置や比較方法にNULL値を設定するとエラーになります

戻り値
1~ : 検索する文字の位置
0 : 見つからなかった
検索開始位置(初期値は1) : 検索される文字列が空
NULL : NULL値が設定された

評価方法
0 : バイナリーモード
1 : テキストモード(大文字小文字を区別しません)

Lotus 式言語
  • @True/@False = @Contains (検索される文字列; 検索する文字列);
     ※空の文字列を渡すと@Trueが戻ります
  • @True/@False = @Begins (検索される文字列; 検索する文字列);
     ※検索される文字列の先頭に見つかると@Trueが戻ります
  • @True/@False = @Ends (検索される文字列; 検索する文字列);
     ※検索される文字列の末尾に見つかると@Trueが戻ります

 ※いずれも大文字小文字を区別します

If : 条件によって分岐します

Lotus Script 言語
If 条件式 Then
 式
Elseif 条件式 Then
 式
Else
 式
End If

 ※If ~ Elseif ~ Elseif と繰り返せます
 ※Elseif Else ともに使わないことができます

If 条件式 Goto ラベル
ラベル:
式
If 条件式 Goto ラベル Else 式
ラベル:
式

 ※If ~ Goto ~ Else ~ は改行せずに書きます

VbScript 言語
If 条件式 Then
 式
Elseif 条件式 Then
 式
Else
 式
End If

 ※If ~ Elseif ~ Elseif と繰り返せます
 ※Elseif Else ともに使わないことができます

Lotus 式言語
  • @If (条件式; 式; 式);
     『条件式; 式; 』は最大99回繰り返せます
  • @V2If (条件式; 式; 式);
     ※@V2If は旧バージョン用です、上位互換がある @If に書き換えることができます

ArrayGetIndex : 配列に値が含まれているか?その位置は?

Lotus Script 言語
  • 見つかった検索値の位置 = ArrayGetIndex (配列, 検索値)
  • 見つかった検索値の位置 = ArrayGetIndex (配列, 検索値, 比較方法)
     ※文字値へ変換してから比較します

比較方法
0 = 大文字小文字、全角半角を区別します
1 = 大文字小文字を区別しません
4 = 全角半角を区別しません
5 = 大文字小文字、全角半角を区別しません
 ※規定は 0 ですが、規定を Option Compare で変更することができます

Lotus 式言語
  • 見つかった検索値の位置 = @Member (検索値; 配列); ' 見つからなかったときは 0 を返します
  • True/False = @IsMember (検索値(文字値); 配列); ' 見つかったとき @True を返します
  • True/False = @IsMember (検索値(配列値); 配列); ' 検索値がすべて見つかったとき @True を返します
  • True/False = @IsNotMember (検索値(文字値); 配列); ' 見つかったとき @False を返します
  • True/False = @IsNotMember (検索値(配列値); 配列); ' 検索値のいずれかが見つかったとき @False を返します
     ※@IsNotMember は !@IsMember と一致しません

StrToken : 区切記号で区切られた文字値の一部を拾いますノーツ/ドミノ

Lotus Script 言語
  • StrToken (文字値, 区切記号, 場所)
  • StrToken (文字値, 区切記号, 場所, 比較方法)

場所
0 のとき 1 とみなされます
0 より大きいとき、左から何番目か?
0 より小さいとき、右から何番目か?

比較方法
0 = 大文字小文字、全角半角を区別します
1 = 大文字小文字を区別しません
4 = 全角半角を区別しません
5 = 大文字小文字、全角半角を区別しません
 ※規定は 0 ですが、規定を Option Compare で変更することができます


えおか = StrToken ({あいう,えおか,きくけ}, {,}, 2)

Lotus 式言語
  • @Word (文字値; 区切記号; 場所);

場所
0 のとき 1 とみなされます
0 より大きいとき、左から何番目か?
0 より小さいとき、右から何番目か?

ArrayUnique : 配列から重複を取り除きます

Lotus Script 言語
  • ArrayUnique (1次元配列)
  • ArrayUnique (1次元配列, 比較方法)

比較方法
0 = 大文字小文字、全角半角を区別します
1 = 大文字小文字を区別しません
4 = 全角半角を区別しません
5 = 大文字小文字、全角半角を区別しません
 ※規定は 0 ですが、規定を Option Compare で変更することができます
 ※配列が文字列のときに比較方法を選択できます

Lotus 式言語
  • @Unique (配列)
     ※パラメータなしの @Unique は、呼び出すたびに異なる文字列を返します

比較方法
 ※大文字小文字を区別します

StrCompare : 文字列を比較します

Lotus Script 言語
  • 数値 = StrCompare (文字列1, 文字列2) ' 別名として StrComp があります
  • 数値 = StrCompare (文字列1, 文字列2, 比較方法)

比較方法
0 = 大文字小文字、全角半角を区別します
1 = 大文字小文字を区別しません
2 = プラットフォームの並び順で比較
4 = 全角半角を区別しません
5 = 大文字小文字、全角半角を区別しません
 ※規定は 0 ですが、規定を Option Compare で変更することができます

戻り値
-1 = 文字列1 < 文字列2
0 = 文字列1 = 文字列2
1 = 文字列1 > 文字列2
Null値 = 文字列1または文字列2がNull値

VBScript 言語
  • 数値 = StrComp (文字列1, 文字列2)
  • 数値 = StrComp (文字列1, 文字列2, 比較方法)

比較方法
0 = バイナリモードで比較します
1 = テキストモードで比較します
 ※規定は 0 です

戻り値
-1 = 文字列1 < 文字列2
0 = 文字列1 = 文字列2
1 = 文字列1 > 文字列2
Null値 = 文字列1または文字列2がNull値

Lotus 式言語
  • 数値 = @Compare (文字列1, 文字列2)
  • 数値 = @Compare (文字列1, 文字列2, 比較方法)
     ※文字列に複数値を設定できます
     ※文字列1と文字列2の値の数をそろえてから比較します

比較方法
[CASESENSITIVE]/[CASEINSENSITIVE] = 大文字小文字を区別/区別しないで比較します
[ACCENTSENSITIVE]/[ACCENTINSENSITIVE] = アクセントを区別/区別しないで比較します
[PITCHSENSITIVE]/[PITCHINSENSITIVE] = 全角半角を区別/区別しないで比較します
 ※規定は [CASESENSITIVE] : [ACCENTSENSITIVE] : [PITCHSENSITIVE] です
 ※Unicodeスタンダードソートを設定しているときは使えない比較方法があります

戻り値
-1 = 文字列1 < 文字列2
0 = 文字列1 = 文字列2
1 = 文字列1 > 文字列2

Format : 日時値を文字値へ変換します

Lotus Script 言語
  • Format (日時)
  • Format (日時, 形式)

日時の形式の例
2020/11/29 = Format (Now, {Short Date})
 ※オペレーティングシステムで指定された日付形式になります
14:51 = Format (Now, {Short Time})
 ※オペレーティングシステムで指定された時刻形式になります
2020/11/29 14:51:06 = Format (Now, {yyyy/mm/dd hh:mm:ss})
11/29 11:06 = Format (Now, {mm/dd mm:ss})
02:51:06 PM = Format (Now, {hh:mm:ss AM/PM})
 ※月と時はどちらもmmで指定しますが、hhのあとのmmは時と解釈されます
 ※スラッシュ(/)とコロン(:)はオペレーティングシステムで指定された記号に変換されます
 ※AM/PMと記載するとhhは01~12になり、AMまたはPMが付加されます
 ※am/pmと小文字で記載すると、amまたはpmが付加されます
2020/11/29 14:51:06 = Format (Now, {General Date})

VbScript 言語
  • FormatDateTime (日時)
     ※色々とオプションを指定できます
Lotus 式言語
  • @Text (日時);
  • @Text (日時; 形式);

日時の形式の例
2020/11/29 14:51:06 = @Text (@Now);
2020/11/29 14:51:06 = @Text (@Now; {S2});
2020/11/29 = @Text (@Now; {S0});
14:51:06 = @Text (@Now; {S1});
14:51 = @Text (@Now; {T1});

Format : 数値を文字値へ変換します

Lotus Script 言語
  • 文字値 = Format (数値)
  • 文字値 = Format (数値, 形式)

数値の形式の例
¥123,457 = Format (123456.789, {Currency})
123,456.79 = Format (123456.789, {Standard})
12345678.90% = Format (123456.789, {Percent})
1.23E+05 = Format (123456.789, {Scientific})
98% = Format (0.98, {#0%})
¥123,456. = Format (123456, {$#,##0.})
 ※桁区切記号(,)、小数点(.)、通貨記号($)はオペレーティングシステムで指定された記号に変換されます

VbScript 言語
  • FormatCurrency (数値)
  • FormatNumber (数値)
  • FormatPercent (数値)
     ※オプションを色々と指定できます
Lotus 式言語
  • @Text (数値);
  • @Text (数値; 形式);

数値の形式の例
123456.789 = @Text (123456.789);
123456.79 = @Text (123456.789, {F});
1.23E+05 = @Text (123456.789, {S});
\123456.79 = @Text (123456.789, {C});
123,456.789 = @Text (123456.789, {,});
123,45678.9 = @Text (123456.789, {%});

Split : 区切記号で文字列を配列へ変換します

Lotus Script 言語

  • 配列 = Split (文字列) ' 区切記号は空白になります
  • 配列 = Split (文字列, 区切記号)
  • 配列 = Split (文字列, 区切記号, 戻り値の要素数)
  • 配列 = Split (文字列, 区切記号, 戻り値の要素数, 評価方法)

戻り値の要素数
-1 : 指定なし。すべての区切記号で分割
0 : 戻り値に値なし。戻り値の要素数は無し
1 : 分割なし。戻り値の要素数は-1と同じ
2 : 最初の区切記号だけで2つに分割。戻り値の要素数は2つまで
3 : 最初と2つ目の区切記号だけで3つに分割。戻り値の要素数は3つまで

評価方法
0 : 大文字小文字、全角半角を区別します
1 : 大文字小文字を区別しません
4 : 全角半角を区別しません
5 : 大文字小文字、全角半角を区別しません

VbScript 言語

  • 配列 = Split (文字列) ' 区切記号は空白になります
  • 配列 = Split (文字列, 区切記号)
  • 配列 = Split (文字列, 区切記号, 戻り値の要素数)
  • 配列 = Split (文字列, 区切記号, 戻り値の要素数, 評価方法)

評価方法
0 : バイナリーモード
1 : テキストモード(大文字小文字を区別しません)

Lotus 式言語
  • @Explode (文字列); ' 区切記号は空白・カンマ(,)・セミコロン(;)になります
  • @Explode (文字列, 区切記号);
  • @Explode (文字列, 区切記号, 戻り値にブランクを含めるか?);
  • @Explode (文字列, 区切記号, 改行を区切り記号として扱うか?);

区切記号
区切記号の長さは1文字です
区切記号に「ab」を指定すると「a」と「b」が区切記号になります

戻り値にブランクを含めるか?
False : (初期値)文字列の最初や最後に区切記号がある、または区切記号が連続しているとき、戻り値にブランクが含まれないようにします
True : 戻り値からブランを取り除きません

改行を区切り記号として扱うか?
True : (初期値)改行を区切記号に含めます
False : 改行は区切記号ではありません

Print : メッセージをステータスバーへ表示したり、ログへ記録します

Lotus Script 言語
  • Print 値
     ※改行は Chr (10) を使用します。プラットフォーム固有の改行へ変換されます

注意
クライアントで実行しているときはステータスバーへ表示し、サーバーで実行しているときはログ(log.nsf)へ記録します
ステータスバーへ表示されるメッセージをログへ記録するには notes.ini に LogStatusBar=1 を設定します
ログをテキスト形式のコンソールログ(console.log)にも記録するには notes.ini に Console_Log_Enabled=1 を設定します

VbScript 言語

コマンドプロンプトから実行する CScript モードのとき
WScript.echo 値
WScript.StdOut.WriteLine 値
WScript.StdOut.Write 値 ' 改行が追加されません
 ※標準出力へ表示されます

ダブルクリックで実行する WScript モードのとき
WScript.echo 値
 ※ダイアログボックスが表示されます

Lotus 式言語

@StatusBar (値);

注意
クライアントで実行しているときはステータスバーへ表示し、サーバーで実行しているときはログ(log.nsf)へ記録します
ステータスバーへ表示されるメッセージをログへ記録するには notes.ini に LogStatusBar=1 を設定します
ログをテキスト形式のコンソールログ(console.log)にも記録するには notes.ini に Console_Log_Enabled=1 を設定します

Forall : 値の数だけ繰り返します

Lotus Script 言語

例:

Forall 参照変数 In 複数値
 式
 Exit Forall ' Forall から抜け出します
End Forall

注意
参照変数は Forall で使用する特別な変数で、Dim では宣言できません
参照変数の値を書き換えると In に続く複数値が変更されます

List : キーと値のペアで記憶する連想配列(辞書、ディクショナリー)を使います

VbScript 言語

For Each 変数名 In 複数値
 式
 Exit For ' For から抜け出します
Next

StrLeft,StrLeftBack : 検索される文字値の検索値より左側を返します

Lotus Script 言語

左側から検索される文字値を検索します
文字値 = StrLeft (検索される文字値,検索値,比較方法,何番目の検索値?)
文字値 = StrLeft (検索される文字値,検索値,比較方法)
文字値 = StrLeft (検索される文字値,検索値)

右側から検索される文字値を検索します
文字値 = StrLeftBack (検索される文字値,検索値,比較方法,何番目の検索値?)
文字値 = StrLeftBack (検索される文字値,検索値,比較方法)
文字値 = StrLeftBack (検索される文字値,検索値)

比較方法
0 = 大文字小文字、全角半角を区別します
1 = 大文字小文字を区別しません
4 = 全角半角を区別しません
5 = 大文字小文字、全角半角を区別しません

戻り値には検索値を含みません
例: {ABCAB} = Strleft ({ABCABC},{c},1,2)

Lotus 式言語

左側から検索される文字値を検索します
文字値 = @Left (検索される文字値,検索値)

右側から検索される文字値を検索します
文字値 = @LeftBack (検索される文字値,検索値)

戻り値には検索値を含みません
例: {AB} = @Left ({ABCABC},{C})

大文字小文字、全角半角を区別します
例: {ABCab} = @Left ({ABCabc},{c})

Cdat,DateValue,DateNumber,TimeValue,TimeValue : 日時値へ変換します

Lotus Script 言語
  • 日時値 = Cdat (日時に変換できる値) ’ CVDate と別名で書くこともできます
  • 日付値 = DateValue (日付に変換できる文字値)
  • 日付値 = DateNumber (年, 月, 日) ’ DateSerial と別名で書くこともできます
  • 時刻値 = TimeValue (時刻に変換できる文字値)
  • 時刻値 = TimeNumber (時, 分, 秒) ’ TimeSerial と別名で書くこともできます

例: 1899/12/30 00:00:00 = Cdat (0)

VbScript 言語
  • 日時値 = Cdate (日時に変換できる値)
  • 日付値 = DateValue (日付に変換できる値)
  • 日付値 = DateSerial (年, 月, 日)
  • 時刻値 = TimeValue (時刻に変換できる値)
  • 時刻値 = TimeSerial (時, 分, 秒)
Lotus 式言語

日時値 = @TextToTime (日時に変換できる文字値);
時刻値 = @ToTime (時刻に変換できる値);
日時値 = @Time (日時に変換できる値);
日時値 = @Time (年; 月; 日);
日時値 = @Time (年; 月; 日; 時; 分; 秒);

Err,Erl,Error : エラーを処理します

Lotus Script 言語
  • Err : エラーが発生すると、エラー番号(数値)が入ります
  • Erl : エラーが発生すると、ソースコードの何行目という場所(数値)が入ります
  • Error : エラーが発生すると、エラーメッセージが入ります

エラーが発生したときにどうするか定義します
On Error Resume Next
On Error Goto ラベル

例:

On Error Goto ラベル
 処理
 Exit Sub
ラベル:
 エラー処理
 Resume Next ’ エラーの次の行へ戻る

似ている命令
On 番号 Goto ラベル1, ラベル2, ... ’ 番号によって異なるラベルへ制御を移す命令です。番号がゼロのときは何もしません
例 : On Err Goto ラベル ’ Err 変数の値(初期値は0)によってラベルへ制御を移します

VbScript 言語
  • Err.Number : エラーが発生すると、エラー番号(数値)が入ります
  • Err.Source : エラーが発生した場所の名前が入ります
  • Err.Description : エラーが発生すると、エラーメッセージが入ります

初期化
Call Err.Clear ()
 ※ On Error や Exit でも Err が初期化されます

On Error は Resume Next だけです
On Error Resume Next

注意
最初の On Error より前は Err オブジェクトが存在しません

例:

On Error Resume Next
Call Err.Clear ()
 処理
 If 0 <> Err.Number Then
  エラー処理
  Call Err.Clear ()
 End If
Lotus 式言語
  • @IsError (評価式) : 評価式がエラーを返すと @True になります
  • @IfError : 廃止されました。「何がエラーなのか」というところが @IsError と異なりました

例 : @If (@IsError (評価式); エラー時の式; 正常時の式);