English help on website



文字列(Ver9.30対応版)
目次式について− 文字列
 文字列は、ダブルクォーテーションで囲みます。
"ABC"
 ダブルクォーテーション記号そのものや\マークは、\を付けて指定します。
"これは、\"文字列\"です。"
"\\記号"
 タブ文字は\t,改行文字は\n で指定できます。
insert "\n";
 文字コードを指定したい場合は、\xを使って16進数で指定します。
"文字コード41は、\x41です。"
 8進数の表記には対応していません。(例えば\oooのoに数字を書く書き方)

 Unicodeで文字コードを指定したい場合は、\uの後に16進数4桁で指定します。
 または\Uの後に16進数8桁で指定します。(V8.52以降)
"Unicodeで「あ」は、\u3042です。"
 マクロファイルをUnicode(UTF-16)で保存すると、Unicodeの文字を直接記述できます。(V8.00以降)
 Unicode(UTF-16)で保存する場合は、必ずBOM付きである必要があります。

 マクロファイルをUnicode(UTF-8)で保存すると、Unicodeの文字を直接記述できます。(V8.50以降)
 Unicode(UTF-8)で保存する場合は、必ずBOM付きである必要があります。

 Unicode(UTF-16,Big-Endian)には対応していません。

 Unicodeの文字コードを文字列に変換するには、unichar関数を使う方法もあります。


 文字列の演算としては、+ だけが使えます。+ は文字列を連結します。
message $a + "個";

 変数は、変数と変数名を管理する領域のサイズが合計で1MBくらいまで扱えます。(標準の場合。[その他]→[動作環境]→[環境]で上限を指定できます)
 上限は、getmaxinfoで知ることができます。

 扱える変数の上限に関わらず、$a = "xxx...xxx"; というようにマクロファイル上に文字列を直接記述する場合は1MBの上限があります。(V9.19未満は128KB, V8.88未満は64KB, V8.66未満は4KB)
 $a = $b + $c; というように連結して書くと大丈夫になります。


文字列と変数

文字列の中に変数の内容を入れる場合は、ダブルクォーテーションの中に変数名を書き込む方法は使えません。「+」を使って文字列を連結させる必要があります。
また、数値型の変数の値を文字列に結合する際には、str関数などで文字列型に変換してから結合する必要があります。

$moji = "あいう";
message "変数の内容は$mojiです";            //×この書き方はできません。
message "変数の内容は" + $moji + "です";    //〇この書き方でできます。

#kazu=123;
message "数値の内容は#kazuです";              //×この書き方はできません。
message "数値の内容は" + #kazu + "です";      //×この書き方もできません。
message "数値の内容は" + str(#kazu) + "です"; //〇この書き方でできます。


「R"」から始まる文字列

 「R"(」または「R"keyword(」で始まる書き方で、文字列をエスケープなしで書くことができます。(V8.66以降)

 「R"(」を始まりにすると、「)"」が現れるまでの全ての文字を文字列として解釈します。
 「R"keyword(」を始まりにすると、「)keyword"」が現れるまでの全ての文字を文字列として解釈します。keywordは任意です。

 文字列として解釈されている範囲の「\」はそのまま「\」と書くことができます。
 「"」はそのまま「"」と書くことができます。
 改行はそのまま改行として複数行で書くことができます。
//以下の2つは同じ
message "文字列";
message R"(文字列)";

//以下の2つは同じ
message "文字列";
message R"hoge(文字列)hoge";

//以下の2つは同じ
message "複数行\n文字列";
message R"(複数行
文字列)";

//以下の2つは同じ
message "\"C:\\Program Files (x86)\"";
message R"xxx("C:\Program Files (x86)")xxx";



「@"」から始まる文字列

 「@"」で始まる書き方で、文字列を「"」以外のエスケープなしで書くことができます。(V8.66以降)

 「@"」から「"」までが文字列として解釈されますが、途中に「""」がある場合は1つの「"」として解釈します。
 「\」はそのまま「\」と書くことができます。
 「"」は「""」と書く必要があります。
 改行はそのまま改行として複数行で書くことができます。

//以下の2つは同じ
message "文字列";
message @"文字列";

//以下の2つは同じ
message "複数行\n文字列";
message @"複数行
文字列";

//以下の2つは同じ
message "\"C:\\Program Files (x86)\"";
message @"""C:\Program Files (x86)""";



「"""」から始まる文字列

 「"""」から始まる書き方で、文字列をエスケープなし、インデント付きで書くことができます。(V9.19以降)
newfile;
insert """"""""""""""""""""""""""""""""""""
       """〜"""の間の文字列を生の文字列として扱うことができます。
       
       一行で書く場合は、改行なしで"""abcdef"""と書きます。
       複数行で書く場合は、開始の"""の直後に文字を書かず、すぐ改行します。最初の改行は無視されます。
       終端の"""の行の前は空白またはタブのインデントのみで、文字を入れてはいけません。最後の改行とインデントは無視されます。
       例:
       $a = """
           "C:\Program Files\Hidemaru\Hidemaru.exe" "C:\Folder\File.txt"
           """;
       
       「"""」のペアは、「""""」と4個にしてもいいし、「""""""""""」と10個にしてもいいです。
       例えば10個では、9個までの"""""""""を文字列として書くことができます。
       
       各行のインデントは、無視する部分と使う部分を分けることができます。
           if(abc) {
               /// ///
           }
       無視されるインデントは、終端の「"""」の行頭の空白またはタブと一緒のインデントにしておくと、一致するものが全ての行で省かれます。
       省かれたインデント以外の残されたインデントは文字列として有効です。
       改行だけとなる行は、インデントが無くてもできます。
       最後の行に改行はありません。改行する場合は1行空けます。
       
       """""""""""""""""""""""""""""""""""";
endmacro;
message """文字列一行OK""";
message """"文字列"""4連以上の引用符OK"""";
message """
複数行Ok
先頭末尾改行
""";
message """
    インデントOK
    文字列
    """;
message """
  インデントずれエラー
    文字列
    """;
message """先頭はすぐ改行エラー
    """;
message """
    末尾はインデントのみエラー""";