投稿者: ume

  • [C#]List<型>

    using System.Collection.Generic;
    List<型> 変数名 = new List<型>();
    変数名.Add(値); // 追加
    変数名[位置(0-)] = 値; // 更新、追加はできない
    変数名.RemoveAt(位置(0-)); // 削除
    値(true==削除した) = 変数名.Remove(値); // 削除
    変数名.Clear(); // すべて消去
    値 = 変数名[位置]; // 取得
    変数名.Sort(); // 並び替え
    件数 = 変数名.Count;
    位置 = 変数名.IndexOf(値); // -1 == 含まれない
    型[] = 変数名.ToArray(); // Listから配列へ
    foreach(var 一時変数名 in 変数名) { 値 = 一時変数名; }

  • [Windows]Show-NetFirewallRule

     ファイアーウォールの設定を全量表示するときに、PowerShellでShow-NetFirewallRuleコマンドを使います。

     Show-NetFirewallRuleコマンドに先立ってDateコマンドを実行すると、Show-NetFirewallRuleの出力内容が要約されるようです。RemoteAddress部分が長いとき、Dateコマンドのあと(直後でなくてもよい)にShow-NetFirewallRuleコマンドを実行すると、RemoteAddressの値が{IPアドレス IPアドレス…}と省略されます。

  • [Ubuntu]別名を設定

    はじめに

     例えばLaravelで使う[sail]ですが、フルパスを付けると[/home/○/○○/vendor/bin/sail]となります。毎回使うことを考えると、もっと短くしたいと考えるでしょう。
     ※○や○○には環境によって異なる値が設定されます。

    フルパスを調べる

     今どこにいるのか、カレントディレクトリを調べましょう。Ubuntuで次の命令を入れます。

    pwd

     うまく /home/○/○○/vendor/bin/sail の○部分を調べることができたでしょうか?

     次にUbuntuの設定ファイルに追記します。Ubuntuで次の命令を入れて、テキストエディターを起動します。

    vi ~/.profile

     コンソールにファイル内容が表示されたとおもいます。
    キーボードで「i」キーを押して、挿入モードにします。カーソルはファイルの先頭位置にあるとおもいます。その位置で次の行を挿入します。[○]部分は、先に調べたパスで置換してください。

    alias sail='[ -f sail ] && bash sail || bash /home/○/○○/vendor/bin/sail'

     次に[Enter]キーを押して改行します。そして[ESC]キーを押して挿入モードを終えます。
    ファイルを保存して閉じるために次の命令を入力して[Enter]キーを押します。

    :wq

     更新したファイルを反映させるために、Ubuntuへ次の命令を入力します。

    source ~/.profile

     これで別名の設定は終了です。[sail]と入力したらsailのヘルプが出てくるようになりましたか?

  • [PHP]Laravelの開発環境をWindowsで整える

    はじめに

     WindowsパソコンにLaravelの開発環境を整えました。およそ次のとおりになります。

    1. WSL(WindowsでLinuxを使えるようにするもの)
    2. WSLにUbuntuをインストール
    3. WindowsにDocker Desktopをインストール
    4. UbuntuにLaravelをインストール

    WSL

     [コントロールパネル]>[プログラム]>[プログラムと機能]>[Windowsの機能の有効化または無効化]を開いて、次の項目にチェックを入れます。

    • Linux 用 Windows サブシステム
    • 仮想マシン プラットフォーム

     これをPowerShellで設定するには次のようにします。PowerShellは[管理者として実行]します。

    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

    WindowsでWSL2を使って「完全なLinux」環境を作ろう!

     ここまで設定したら、一旦Windowsを再起動します。

    Ubuntu

     パソコンから目を離しても、Windowsがスリープしないように、[システム]>[電源とバッテリー]で設定しておきます。

     それでは、Ubuntuをインストールしましょう。PowerShellを[管理者として実行]し、次のようにします。

    wsl --install

     Ubuntuがインストールされると、新しいユーザーの名前とパスワードの登録がおこなわれます。
    ユーザー名とパスワードは何でもよいですが、ブランクにできません。このパスワードは頻繁に使いますので、しっかりメモしておきましょう。
     成功すると、[スタート]>[すべてのアプリ]に[Ubuntu]が登録されます。

    WSL を使用して Windows に Linux をインストールする

     次に、Ubuntuを更新しましょう。[スタート]>[すべてのアプリ]から[Ubuntu]を開いて、次のようにします。

    sudo apt update && sudo apt upgrade -y
    exit

     ここでWindowsを再起動します。

     もういちど、Ubuntuを開いて、次のようにします。

    sudo do-release-upgrade
    exit

     途中で[y]や[ENTER]の入力を求められます。

     更に、WindowsとUbuntuの改行コードの違いを吸収するために次のようにします。

    sudo apt-get install -y dos2unix
    find . -type f -print0 | xargs -0 dos2unix

    Docker Desktop

     次のサイトからWindows用のDocker Desktopをインストールします。これはWindowsのアプリです。

    ドッカーデスクトップ

     インストールが正常に終わると[Installation succeeded]と表示されます。そのあとDocker Desktopを開くとチュートリアルが始まりますが、とりあえずスキップしましょう。

    ララベルとドッカー

    Laravel

     Ubuntuを開いて、次のようにします。
    [○○]部分には任意のディレクトリ名を入れます。例えば[example-app]とすることができます。

    curl -s "https://laravel.build/○○?php=81" | bash
    cd ○○ && ./vendor/bin/sail up

     これで、開発環境は整いました。

    【Docker】Laravel Sailのインストールと使い方を確認

    Laravelを開く

     ここからは、コンピューターを開いてLaravelにアクセスするたびにおこないます。
    まずはUbuntuを開いて、次のようにします。

    cd ○○ && ./vendor/bin/sail up -d

     [○○]部分には、先に curl -s “https://laravel.build/○○?php=81” | bash したときの○○を入れます。
     次に、ブラウザを開いて http://localhost/ にアクセスします。無事にLaravelの画面が表示されたでしょうか。

     なお、Laravelを終わらせるには、次のようにします。

    ./vendor/bin/sail down

    おわりに

     開発環境の細かいところは、参加するチームによって色々と差異があるとおもいます。基本的なところが押さえられていたなら いいな..とおもいます。

  • [Windows]古いファイルをまとめて削除

     コンピューターのファイルには、動作記録(ログ)や破棄されなかった一時ファイル(ワーク)が含まれます。長く動いているコンピューターにはこれら多くのファイルが残ります。ほおっておくと記憶領域(ハードディスク)の多くを占めるようになるかもしれません。
     更新日時が古いものを削除するには、次のようなWindowsバッチ(*.bat)をつくって動かします。毎月とか毎年など定期的に動かせば安心ですね!

    forfiles /P "パス" /S /D -猶予日数 /C "cmd /C if false==@isdir (echo delete @file @fdate @ftime @fsize byte & del @path)"
    rem 『パス』の末尾は¥マークで終わらないこと!
    rem 『猶予日数』は0から32768の範囲で指定します

    forfiles | Microsoft Docs

  • [Domino]ノーツドミノとは

    [Domino]ノーツドミノとは

    ノーツドミノとは

     ノーツドミノとはコンテンツマネジメントシステム(CMS)のひとつです。
     文字コードが異なる複数の国の文字をひとつの文書に表示するためにロータスマルチバイト文字セット (LMBCS) というノーツ固有のユニコードが使われ、文書を保存・検索するためにつくられた付属のデータベースに保存されます。
     機密文書を扱えるように表示・編集などのセキュリティは非常に細かく、やろうとおもえば段落ごとに設定することができます。

     ノーツドミノに付属するデータベースは分散型で、国・企業や言語が異なるサーバにも情報を複製して配置でき、ひとつのサーバが止まってもクライアントがサーバを切り替えて業務を継続できます。

     厳密には『ドミノ(Domino)』がサーバーソフトウエアで、『ノーツ(Notes)』がクライアントソフトウエアになります。クライアントソフトウエアには、ブラウザーやスマートフォンからサーバーにアクセスする『ノマド(Nomad)』があります。

     また、ノーツドミノはアプリケーションを開発・実行するアプリケーションプラットホームでもあります。開発環境は専用ソフトをパソコンにインストールして使います。オブジェクト指向言語によるプロコード開発だけでなく、マウスで選択していくノーコード開発や、関数を使ったローコード開発もできます。
     統合開発環境(IDE)は Eclipse をベースにしたデザイナー(Domino Designer)や、ブラウザーアプリを簡単に開発するためのリープ(Domino Leap)があります。

     ドミノはメールの送受信や中継をするメールサーバでもあります。コンテンツマネジメントシステム(CMS)としてメールをデータベースに蓄積することや、アプリケーション開発プラットホームとしてメールを受信や中継するタイミングで動くアプリケーションを開発することができます。

     ノーツドミノに付属または作ったアプリケーションが、グループウエアとして皆で協力して業務を進めるツールになります。グループウエアといえばノーツと言われた時期があります。

    用途

     ノーツドミノは次の用途で企業や企業グループ向けに使われます。

    • 有用な社内文書を蓄積・分類・共有・検索ができます
    • 少ないコストで業務アプリをつくれます
    • 電子申請(ペーパーレス)ができます
    • 社内外のメールの送受信と蓄積・分類・共有・検索ができます
    • メールのように、文書に添付ファイルを添えて保存できます

    終わったか?

     近ごろもノーツドミノ話題として、『ノーツドミノが終わった』『ノーツドミノのサポートが終わった』というお話を聞くことがあります。これは10年前に発売された古いバージョンのサポートが終わったという意味です。新しいバージョンは出続けていますし、当然にサポートがあります。

    高いか?

     他にも『ノーツドミノのライセンスが高い』というお話しを聞きます。ノーツドミノはIDあたり月950円です。(HCL Dominoの価格(料金・費用) – ITreview
     実際にノーツドミノからシェアポイントやセールスフォースへ移行したお客様のお話しでは『ノーツドミノのライセンスは安かった』と聞いています。ノーツドミノは開発環境やデータベースまで含んだオールインワンのソフトウエアで、追加のライセンスなしで使えます。後付けされたリープやセームタイム(Sametime)には別途ライセンスが必要だったとおもいますが、これが無ければ使えないものではありません。
     ノーツドミノ以外の良く比較されるソフトウエアは単機能であることが多いため複数の製品を組み合わせて使います。(SharePoint Online のオプションの比較 – Microsoft) それぞれにライセンス料がかかるため『トータルではノーツドミノが安い』となります。
     開発や維持管理までお話しを拡げると、ノーツドミノはノーツドミノを知れば使いこなせます。 複数のソフトウエアを組み合わせると、それぞれの製品を知ることはもちろんですが、組み合わせによってできる/できないというところまでわからないと使いこなせないため必要なエンジニアの数が激増します。 エンジニアの人件費合計も『ノーツドミノは安い』となります。

    実際のところノーツはいくらするの?

     ノーツドミノを導入するといくらかかるかコストを試算してみましょう。

    ライセンス料金

     ライセンスは月950円ですから、年11,400円になります。

    サーバー料金

     サーバーはIntel(AMD不可)の2コアCPUと8GBメモリーと3GBの空きディスク容量があればOKです。(システム要件 – HCL Domino

    VPS

     プロバイダのVPSを使えばインターネット経由でアクセスできます。
     例えば、さくらのVPS W8Gプラン(メモリ8GB、SSD400GB)なら要件を満たし、年107,690円になります。(さくらのVPS for Windows Server

    ミニPC

     ミニPCなら10万円で買えるものがありますし、ディスクが少ないモデルでは3万円でも買えそうです。
     社内にミニPCを置くことになるとおもいますが、インターネットからアクセスするばあいは固定IPアドレスが必要になります。

    クラウド

     Amazon・Google・Microsoftなどのクラウドでもノーツドミノは動きますが、金額の試算が難しいためここでは言及しません。

    エンジニアの料金

     最初の導入や、プロコードを使った複雑な業務アプリケーションをつくるのはエンジニアにやってもらったほうがいいと考えます。

     最初の導入でやってもらう内容をギュッと厳選すれば、過去には2日でおこなった実績があります。

     業務アプリケーションの開発では、内容によって幅が広いですが、ひとつ5日くらいでしょうか。

     エンジニアが月120万円くらいなので、1日なら6万円くらいです。週1日でお願いすると年300万円くらいになります。
     アシスタントエンジニアなら半額くらいになるとおもいますが、高度なことができなかったり、エンジニアよりも時間がかかって割高になるため注意しましょう。
     経験では、エンジニアとアシスタントエンジニアを組み合わせると割安になります。

    ノーツの合計金額

     それではノーツドミノを使うといくらかかるか総コストを出してみましょう。

    自力で構築・運用するばあい

     さくらのVPS W8Gプランのばあいでは、ひとりで使うなら年119,090円5人で使うなら年164,690円(ひとりあたり年32,938円)、10人で使うなら年221,690円(ひとりあたり年22,169円)、100人で使うなら年1,247,690円(ひとりあたり年12,477円)になります。

     10万円のミニPC(電気代含まない)を3年間使ったばあいでは、ひとりで使うなら年44,733円5人で使うなら年90,333円(ひとりあたり年18,067円)、10人で使うなら年147,333円(ひとりあたり年14,733円)、100人で使うなら年1,173,333円(ひとりあたり年11,733円)になります。

     これでライセンスとサーバーが用意できましたので、ノーコードやローコードなどを使って一般ユーザーが頑張れば業務アプリケーションをつくることができます。文章の共有は十分できます。
     外部のエンジニアに頼らずに開発と管理をする企業がありますので、十分に現実的です。

    少しだけエンジニアに頼るばあい

     次のように最初の導入と技術支援をエンジニアに依頼したばあいはいくらになるでしょうか。

    • 導入で、エンジニアとアシスタントエンジニアが2日で18万円、5年償却
    • 維持管理と業務アプリケーション開発支援で、エンジニアとアシスタントエンジニアが月1日で月9万円

     さくらのVPS W8Gプランのばあいでは、ひとりで使うなら年1,235,090円5人で使うなら年1,280,690円(ひとりあたり年256,138円)、10人で使うなら年1,337,690円(ひとりあたり年133,769円)、100人で使うなら年2,363,690円(ひとりあたり年23,637円)になります。

     10万円のミニPC(電気代含まない)を3年間使ったばあいでは、ひとりで使うなら年1,160,733円5人で使うなら年1,206,333円(ひとりあたり年241,267円)、10人で使うなら年1,263,333円(ひとりあたり年126,333円)、100人で使うなら年2,289,333円(ひとりあたり年22,893円)になります。

    表にまとめてみました

     これらを次の表にまとめました。

    サーバーエンジニア1人5人10人100人
    さくらのVPS W8Gプラン頼まない年119,090円年164,690円(ひとりあたり年32,938円)年221,690円(ひとりあたり年22,169円)年1,247,690円(ひとりあたり年12,477円)
    さくらのVPS W8Gプラン導入と支援年1,235,090円年1,280,690円(ひとりあたり年256,138円)年1,337,690円(ひとりあたり年133,769円)年2,363,690円(ひとりあたり年23,637円)
    10万円のミニPC 3年償却頼まない年44,733円年90,333円(ひとりあたり年18,067円)年147,333円(ひとりあたり年14,733円)年1,173,333円(ひとりあたり年11,733円)
    10万円のミニPC 3年償却導入と支援年1,160,733円年1,206,333円(ひとりあたり年241,267円)年1,263,333円(ひとりあたり年126,333円)年2,289,333円(ひとりあたり年22,893円)

    関連

    関連する記事はnoteにもあります。

    ノーツのサポートが終わるというけれど。。。

  • [Domino]文書の貼り付けを禁止する方法

    [Domino]文書の貼り付けを禁止する方法

    はじめに

     多くのユーザーに使われているアプリを長年使用していると、個人メールだったり他のアプリの文書だったりが紛れ込んでいることがあります。

    文書の貼り付けを禁止する方法

     アプリのすべてのビューのQueryPasteイベントに次の行を追加することで、貼り付けを禁止することができます。

    Continue = False

     このアプリの文書だけは許可したいというふうに、一部の文書を許可するばあいにはもっと複雑なコードを書く必要があります。

    さいごに

     文書を貼り付ける以外にも、メニューから[ファイル]-[インポート]で文書を追加することができます。この対策として、追加されてしまった文書を表示しないようにしたり、自動削除したりする方法が考えられます。

  • [C++]今の日時を取得

    はじめに

     今の日付と時刻を知りたいとおもったことはありませんか。いくつか方法を記載します。
     ユーザー定義の変数名は日本語にしています。メリハリがあるとコードが読みやすいかなぁとおもったので。
     サンプルでは『using namespace std;』を省略していますので、コードを試すときはこの行をおぎなってください。

    経過秒』を time_t 形式で取得

     とりあえず time_t 形式にします。これは『1970/01/01 00:00:00 UTC からの経過秒』です。
     32ビットシステムでは 2038/01/19 03:14:07 まで表現できるそうです。もうすぐトラブルが発生しそうな予感がしますね。64ビットシステムへの移行が必要です。

    now()を使う方法

    #include <chrono>
    chrono::system_clock::time_point 日時 = chrono::system_clock::now();
    time_t 経過秒 = chrono::system_clock::to_time_t(日時);

    time(nullptr)を使う方法

    #include <chrono>
    time_t 経過秒 = time(nullptr);

     『nullptr』を使うことが推奨されているようですが、かわりに『NULL』や『0』を使うこともできます。

    構造体 tm 形式へ変換

     先ほど求めた経過秒(time_t)を今の日時 (struct tm) にします。今の日時といっても色々ありますが、協定世界時 (UTC,GMT) へ変換するものと、現地時間(ローカルタイム)へ変換するものを記載します。

    協定世界時へ

    struct tm 今の日時;
    gmtime_s(&今の日時, &経過秒);

    現地時間(日本時間)へ

    struct tm 今の日時;
    localtime_s(&今の日時, &経過秒);

    今の日時 (struct tm) を文字の日時 (char[])へ

     今の日時を文字として整形してみましょう。日付の文字列は国によって異なりますが、今回は日本の形式にします。
     ・日本 : //日
     ・イギリス : 日//
     ・アメリカ : /日/
     国によって日付の並び順が異なりますが、何だか話す順番に通じるものがあるような気がします。

    char型の『年/月/日 時:分:秒』へ

    char 文字の日時[128];
    strftime(文字の日時, 128, "%Y/%m/%d %H:%M:%S", &今の日時);

     char[128] では sizeof(char[128]) が128になります。strftime(文字の日時, sizeof(文字の日時), … としても大丈夫そうです。

    wchar_t型の『年/月/日 時:分:秒』へ

    wchar_t 文字の日時[128];
    wcsftime(文字の日時, 128, L"%Y/%m/%d %H:%M:%S", &今の日時);

     wchar_t[128] では sizeof(wchar_t[128]) が 256 になります。wcsftime(文字の日時, sizeof(文字の日時), … とはできませんね。

    さいごに

     コード全体を書いてみましょう。

    #include <chrono>
    using namespace std;
    time_t 経過秒 = time(nullptr);
    struct tm 今の日時;
    localtime_s(&今の日時, &経過秒);
    char 文字の日時[128];
    strftime(文字の日時, 128, "%Y/%m/%d %H:%M:%S", &今の日時);
    cout << "今は " << 文字の日時 << endl;
    
  • [Domino]エクセルを操作する

    [Domino]エクセルを操作する

     ノーツからエクセルを操作するにはエクセルオブジェクトを作成して操作します。

    Dim アプリ As Variant
    Set アプリ = CreateObject ({Excel.Application})

     詳しくは次のリンクを参照してください。

    [中級][LotusScript]ノーツからエクセルを操作するには

    オブジェクト モデル (Excel)

  • [言語比較]比較演算子

    [言語比較]比較演算子

     ふたつの値を比較する演算子を紹介します。

    Lotus Script 言語、Lotus 式言語

    • 値 = 値 ’ 一致するとき True または @True を返す
    • 値 <> 値 ’ 一致しないとき True または @True を返す
    • 値 >< 値 ’ 一致しないとき True または @True を返す
    • Not 値 = 値 ’ 一致しないとき True または @True を返す
    • 値1 > 値2 ’ 値1 は 値2 より大きいとき True または @True を返す
    • 値1 >= 値2 ’ 値1 は 値2 より大きいか等しいとき True または @True を返す
    • 値1 => 値2 ’ 値1 は 値2 より大きいか等しいとき True または @True を返す
    • 値1 < 値2 ’ 値1 は 値2 より小さいとき True または @True を返す
    • 値1 <= 値2 ’ 値1 は 値2 より小さいか等しいとき True または @True を返す
    • 値1 =< 値2 ’ 値1 は 値2 より小さいか等しいとき True または @True を返す
    注意

     どちらかの値が Null のときは結果が Null になります

    VbScript 言語

    • 値 = 値 ’ 一致するとき True を返す
    • 値 <> 値 ’ 一致しないとき True を返す
    • Not 値 = 値 ’ 一致しないとき True を返す
    • 値1 > 値2 ’ 値1 は 値2 より大きいとき True を返す
    • 値1 >= 値2 ’ 値1 は 値2 より大きいか等しいとき True を返す
    • 値1 < 値2 ’ 値1 は 値2 より小さいとき True を返す
    • 値1 <= 値2 ’ 値1 は 値2 より小さいか等しいとき True を返す
    注意

     どちらかの値が Null のときは結果が Null になります

    Windowsバッチファイル (.bat)

    • 値1 EQU 値2 ‘ 値が一致する
    • 値1 NEQ 値2 ‘ 値が等しくない
    • 値1 GTR 値2 ‘ 値1 は 値2 より大きい
    • 値1 GEQ 値2 ‘ 値1 は 値2 より大きいか等しい
    • 値1 LSS 値2 ‘ 値1 は 値2 より小さい
    • 値1 LEQ 値2 ‘ 値1 は 値2 より小さいか等しい
  • [言語比較]Replace, ArrayReplace : 配列の一部を置き換える

    [言語比較]Replace, ArrayReplace : 配列の一部を置き換える

    Lotus Script 言語

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

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

    VbScript 言語

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

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

    Lotus 式言語

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

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

  • [言語比較]Instr : 検索する文字列の位置を調べる

    [言語比較]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 : 条件によって分岐

    [言語比較]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 : 配列のどこに値が含まれているか調べる

    [言語比較]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 : 区切記号で区切られた文字値の一部を拾う

    [言語比較]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 : 配列から重複を取り除く

    [言語比較]ArrayUnique : 配列から重複を取り除く

    Lotus Script 言語

    • ArrayUnique (1次元配列)
    • ArrayUnique (1次元配列, 比較方法)

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

    Lotus 式言語

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

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

  • [言語比較]StrCompare : 文字列を比較

    [言語比較]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 : 日時値を文字値へ変換

    [言語比較]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 : 数値を文字値へ変換

    [言語比較]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 : 区切記号で文字列を配列へ変換

    [言語比較]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 : メッセージを表示したりログへ記録

    [言語比較]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 を設定します

  • [CSS]クラス名に空白を含むとどういう意味?

     次のようにクラス名に空白が含まれるものがあります。
    これはクラス名 abc と def の2つを持つという意味になります。

    class="abc def"

     このクラスにスタイルを設定するときは次のように.(ピリオド)に続けたクラス名を2つ空白を入れずに併記します。
    クラス名 abc と def の両方を持つばあいの設定を指定しますという意味です。

    .abc.def {
       設定: 値;
    }

     ちなみに2つのクラス名の間に空白を挟むと、左側のクラス名のなかにある右側のクラス名の部分という意味になります。

  • [言語比較]Forall : 値の数だけ繰り返す

    [言語比較]Forall : 値の数だけ繰り返す

    Lotus Script 言語

    例:

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

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

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

    VbScript 言語

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

  • [言語比較]StrLeft,StrLeftBack : 検索される文字値の検索値より左側を返す

    [言語比較]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 : 日時値へ変換

    [言語比較]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 : エラーを処理

    [言語比較]Err,Erl,Error : エラーを処理

     実行時エラー(ランタイムエラー)が発生したときにどうするのか?というものです。

    Lotus Script 言語

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

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

    例:

    On Error Goto ラベル
     処理
     Exit Sub ' または Exit Function や Exit Property
    ラベル:
     エラー処理
     Resume Next ’ エラーの次の行へ戻る

     エラーが発生したときに『何もせず異常終了する』というときは次のようにします。この行より先はエラー対応をしません。

    On Error Goto 0

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

    VbScript 言語

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

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

    On Error は Resume Next だけで、On Error Goto は使えません
    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 (評価式); エラー時の式; 正常時の式);

  • [言語比較]Do,While,Until : 繰り返す

    [言語比較]Do,While,Until : 繰り返す

    Lotus Script 言語,VbScript 言語

    Do ’ Exit や Goto がなれけば永遠に Do~Loop の中を繰り返します
     Exit Do ’ 直近の Do から抜けることができます
    Loop
    Do While 式 ’ 式が True のうちは Do~Loop の中を繰り返します
     Exit Do ’ 直近の Do から抜けることができます
    Loop
    Do Until 式 ’ 式が False のうちは Do~Loop の中を繰り返します
     Exit Do ’ 直近の Do から抜けることができます
    Loop
    Do
     Exit Do ’ 直近の Do から抜けることができます
    Loop While 式 ’ 式が True のうちは Do~Loop の中を繰り返します
    Do
     Exit Do ’ 直近の Do から抜けることができます
    Loop Until 式 ’ 式が False のうちは Do~Loop の中を繰り返します
    While 式 ’ 式が True のうちは While~Wend の中を繰り返します
     ’ Exit を使えません
    Wend

    Lotus 式言語

    • @While (条件式; 式1; ...; 式最大254); ※条件式が @True のあいだ式を繰り返します
    • @DoWhile (式1; ...; 式最大254; 条件式); ※条件式が @True のあいだ式を繰り返します

    注意
    @Do (式1; ...; 式最大254);
     ※名前は似ていますが @Do は繰り返しません

  • [言語比較]Chr (10) : 改行記号

    [言語比較]Chr (10) : 改行記号

    Lotus Script 言語

    • Chr (10) : プラットフォーム固有の改行記号に自動変換されます

    注意
    ノーツ/ドミノ サーバーに配置したアプリは、再コンパイルなしで複数のプラットフォームで動作します

    VbScript 言語

    • vbCrLf : Windows プラットフォームの改行記号です
    • vbCr : Mac プラットフォームの改行記号です
    • vbLf : UNIX や Linux プラットフォームの改行記号です

    Lotus 式言語

    • @Char (10) : 改行記号として扱われます
    • @Char (13) : @Prompt 内で改行記号として扱われます
    • @NewLine : 改行記号ですが、使用できないところがいくつかあります
  • [言語比較]ByVal : コピーした値を受け取る

    [言語比較]ByVal : コピーした値を受け取る

    Lotus Script 言語

    • 値のありかを受け取る ByRef(参照渡し)が規定ですが、わざわざ ByRef と明記するとエラーになります
    • ByVal と記載するとコピーされた値を受け取ることができます(値渡し)

    VbScript 言語

    • 値のありかを受け取る(参照渡し)が規定です。わざわざ ByRef と明記することができます
    • ByVal と記載するとコピーされた値を受け取ることができます(値渡し)
  • [言語比較]変数の初期値(既定値)

    [言語比較]変数の初期値(既定値)

    Java, C#, Python

    初期化されていない変数を使うとエラーになります

    Lotus Script

    • 数値型: 0
    • 文字値型: ブランク
    • Boolean型: False
    • オブジェクト型: Nothing
    • Variant型: Empty
    • List型: 初期化されません。アクセスする前に Redim で初期化します

    注意
    Variant型変数を Empty に戻すには、未使用の Variant型変数を利用します
    例: Variant型変数 = 宣言したまま使用していない Variant型変数

    VbScript

    • Variant型: Empty

    注意
    Variant型変数を Empty に戻すには、Empty を使用します
    例: Variant型変数 = Empty

    Lotus 式言語

    • Variant型: Empty