タグ: null

  • [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;
    
  • [言語比較]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

  • [言語比較]& : 文字列連結演算子

    [言語比較]& : 文字列連結演算子

    Java

    • 文字値 = 文字値 + 文字値;

    C#

    • 文字値 = 文字値 + 文字値;
    • 文字値 += 文字値;
    • 文字値 = $”文字値{変数名}文字値”;

    Python

    • 文字値 = 文字値 + 文字値
    • 文字値 += 文字値

    Lotus Script 言語

    • 文字値 = 値 & 値
    • 文字値 = 文字値 + 文字値

    &(アンド)は異なる意味でも使われますので、半角空白を使わずに詰めて書くとコンパライラに誤解されることがあります

    注意
    & は両辺が null のときに null を返します
    + は片方が null のときに null を返します
    + は数値とあわせて使うと、数値に変換できる文字値を数値へ変換して加算することがあります

    演算子ではないところで使用される&記号
    変数名や値の末尾に&を付けると、Long型ですよという意味になります(接尾辞)
    &B、&O、&H は、それぞれ2進数、8進数、16進数ですよという意味になります(接頭辞)
    演算子として&記号を書くときは、コンピューターが困惑しないように、&の前後に空白をはさむとよいでしょう

    VbScript 言語

    • 文字値 = 値 & 値

    注意
    & は両辺が null のときに null を返します

    演算子ではないところで使用される&記号
    &O、&H は、それぞれ8進数、16進数ですよという意味になります
    演算子として&記号を書くときは、コンピューターが困惑しないように、&の後に空白をはさむとよいでしょう

    Lotus 式言語

    • 文字値 = 文字値 + 文字値
  • [言語比較]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が戻ります  ※いずれも大文字小文字を区別します
  • [言語比較]比較演算子

    [言語比較]比較演算子

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

    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 より小さいか等しい