2023/10/22

@関数と LotusScript の Trim の差

Notes でアプリケーション開発をしていて使用する命令に Trim があります。文字列内のスペースを取り除いてくれる関数で頻繁に使いますよね。

先日、開発作業中に LotusScript の Trim 関数と @Trim で挙動が違うことに気が付きました。テスト結果とともに仕様を整理します。


テスト方法

次のようなフォームを作成しテストを実行しました。

各フィールドは次の設定としています。

フィールド名 種類
SrcStr テキスト / 編集可能
Func テキスト / 計算結果 @Trim(SrcStr)
LS テキスト / 作成時の計算結果 ""

更新ボタンのコードは下記の通りです。このボタンで @式を実行し、LotusScript の実行結果をフィールドにセットしています。

Sub Click(Source As Button)
   Dim nuiw As New NotesUIWorkspace
   Dim nuid As NotesUIDocument
   Dim nd As NotesDocument

   Set nuid = nuiw.CurrentDocument
   Set nd = nuid.Document
   nd.LS = Trim(nd.SrcStr(0))

   Call nuid.Refresh()
End Sub


テスト結果

下表のとおりテスト文字列を変えながら結果を確認しました。

テスト文字列 @関数 LotusScript 備考
" "
(半角SPx1)
""
(null)
""
(null)
" "
(全角SPx1)
""
(null)
""
(null)
"    "
(半角SPx3)
""
(null)
""
(null)
"   "
(全角SPx3)
""
(null)
""
(null)
"    あ "
(前後の半角SP)
"あ" "あ" 個数に関係なく削除
"   あ "
(前後の全角SP)
"あ" "あ" 個数に関係なく削除
"あ い   う"
(間の半角SP)
"あ い う" "あ い   う"
(変化なし)
@Trimでは複数の半角スペースは1つに変換
"あ い   う"
(間の全角SP)
"あ い う" "あ い   う"
(変化なし)
@Trimでは複数の全角スペースは半角1つに変換
全角1つの場合はそのまま


まとめ

実験結果をまとめると次の通りです。

◇ 同じ結果となる処理

    • スペースだけで構成される文字列は、全角/半角を問わず null となる
    • 文字列の前後のスペースは、全角/半角を問わず消去される


◇ 挙動が違う処理( = 文字間のスペースの処理)

    • @Trim では、複数の全角スペースは半角スペース1つに変換
      (全角スペース1つの場合は全角のまま)
    • LotusScript では、文字間のスペースは処理されない

0 件のコメント:

コメントを投稿