Lunatic Sol

IT Tips

@ServerName と同等の処理をノーツ R5 で実現する

2004-06-11 13:39:00 | @Formula
現在の DB のサーバー名ってどうやって取得すればいいんだっけ?と Designer ヘルプを眺めていたら 6 から追加された @ServerName というのがあった。サーバー上の DB の場合は CN=Server/O=Domino のように値を返してくれて、ローカルの場合はユーザー名が返るらしい。これをノーツ R5 で実現するにはどうすればいいのか?

よく考えたら現在の DB のサーバー名って @DBName を使えば取得できるじゃないですか。ただ違うのは @DBName はローカルの場合サーバー名をブランクにするという点。そもそもローカルの場合にユーザー名が出る必要性はあるのかどうか?という疑問はありますが、まぁノーツ R5 でも @ServerName と同等のことはできるよという紹介。
@If(
    @Subset(@DbName;1) = "";
    @UserName;
    @Subset(@DbName;1)
)

@関数で10進数を16進数に変換する Part 2

2004-03-30 11:02:00 | @Formula
今朝 N 君に改良版を教えてもらった。こっちの方がスマートなのと、且つ入力チェックもしているので勝手に紹介 (^^;

dec := @Prompt([OkCancelEdit];"Lotus Notes - Dec to Hex conversion";"10進数の値を入力してください";"");
@If(
    @Matches(dec;"+{0-9}"); "";
    @Do(
        @Prompt([Ok];"Lotus Notes - Dec to Hex conversion";"ERROR: 数値を入力して下さい");
        @Return("")
    )
);
n := @TextToNumber(dec);
hex := "";
@DoWhile(
    r := @Modulo(n;16);
    hex := @If( r >= 10 ; @Char( 55 + r) + hex ; @Text(r) + hex);
    n := @Integer(n / 16);
    n >= 16);
hex := @If( n >= 10 ; @Char( 55 + n) + hex ; n = 0 ; ""+ hex ;@Text(n) + hex);
tmp:=@Prompt([OkCancelEdit];"Lotus Notes - Dec to Hex conversion";"16進数変換結果";hex);
■ 関連記事
@関数で10進数を16進数に変換する

@関数で10進数を16進数に変換する

2004-03-29 15:46:00 | @Formula
基本的に LotusScript を使用しているので、個人的には @関数を使う機会はあまりないのですが、Notes の制限で @関数しか使えない場面がいくつかあります。そんな場面で10進数を16進数に変換する必要が出てきたのですが標準のファンクションを調べたらなんと関数がないではないじゃありませんか。

ということで、@関数で10進数を16進数に変換する方法を考えてみました。二回目の@ifが気に入らないのですが、とりあえず作ったサンプルで動けばいいので良しとしましょう。以下のサンプルではあえて@Prompt() でシミュレーションできるようにしていますが、プログラムの中で使う場合は最初と最後の行は省いて dec という10進数文字列を入力値にして最後に hex を返すようにするか、入力は n という10進数整数値にするといいでしょう。

@DoWhile() を使っているので Notes 6 以降でしか使えませんが、ボタンをリッチテキストフィールドに作って以下の関数を貼り付けるだけで簡単にシミュレートできます。ただしエラー処理はしていないので、数値以外の文字列を渡した場合などはどうなるか知りません。10進数の文字列を前提にしたサンプルなので @Prompt() にはシングルバイトの10進数文字列だけを入れてくださいね。Have Fun :-)

dec := @Prompt([OkCancelEdit];"Lotus Notes - Dec to Hex conversion";"10進数の値を入力してください";"");
n := @TextToNumber(dec);
hex := "";
@DoWhile(
    r := @Modulo(n;16);
    @If(
        r=10; hex := "A" + hex;
        r=11; hex := "B" + hex;
        r=12; hex := "C" + hex;
        r=13; hex := "D" + hex;
        r=14; hex := "E" + hex;
        r=15; hex := "F" + hex;
        hex := @Text(r) + hex
    );
    n := @Integer(n / 16);
    n >= 16
);
r := n;
@If(
    r=0; "";
    r=10; hex := "A" + hex;
    r=11; hex := "B" + hex;
    r=12; hex := "C" + hex;
    r=13; hex := "D" + hex;
    r=14; hex := "E" + hex;
    r=15; hex := "F" + hex;
    hex := @Text(r) + hex;
);
@Prompt([Ok];"Lotus Notes - Dec to Hex conversion";"16進数変換結果: " + hex)
■ 関連記事
@関数で10進数を16進数に変換する Part 2