文字列の一部を切り取りたい!

文字列の一部を切り取る?

文字列の切り取りとは、ある文字列の一部分を抜き出すことを指します。MQL4のプログラムで使用するケースとしては、拡張子付きの通貨ペア名、例えば「USDJPYpro」という通貨ペアの文字列から、拡張子を取り除いた通貨ペア名である「USDJPY」を抜き出したい場合などに使います。文字列操作を行う場合はよく使用する関数となりますので、覚えておきましょう。

文字列の一部を切り取るStringSubstr関数

文字列の一部を切り取るには、MQL4で提供されているStringSubstr関数を使用します。

string StringSubstr(
    string string_value,    // string
    int    start_pos,       // position to start with
    int    length = 0       // length of extracted string
);

引用元:StringSubstr – MQL4 Reference

引数

string_value

第一引数のstring_valueには切り取り対象となる文字列を指定します。

start_pos

第二引数のstart_posには切り取りを開始する位置を指定します。開始位置はインデックスで指定するため、1文字目が「0」となります。

length

第三引数のlengthには切り取る文字数を指定します。省略または「0」を指定した場合は指定した開始位置から最後の文字までを切り取ります。

戻り値

切り取りに成功した場合は切り取り後の文字列、失敗した場合は空文字が返却されます。

使用例

1.第三引数(切り取る文字数)を省略

string before = "ABCDEFG";
string after = StringSubstr(before, 2);
Print(after);
実行結果
CDEFG

第三引数である切り取る文字数を省略した場合は、開始位置として指定したインデックスから最後の文字までが切り取る対象となります。

2.第三引数(切り取る文字数)を指定

string before = "ABCDEFG";
string after = StringSubstr(before, 2, 3);
Print(after);
実行結果
CDE

第三引数である切り取る文字数を指定した場合は、開始位置として指定したインデックスから指定した文字数分が切り取る対象となります。

3.第一引数(切り取り対象の文字数)に日本語を指定

string before = "あいうえお";
string after = StringSubstr(before, 1, 3);
Print(after);
実行結果
いうえ

第一引数である切り取り対象の文字が日本語(マルチバイト文字)であっても、バイト数を考慮せずに切り取りを行うことが可能です。

日本語(マルチバイト文字)の切り取り

日本語のようなマルチバイト文字を切り取り対象の文字列として指定した場合、1文字が2バイトであるためインデックスの指定は必ず2の倍数と考えがちですが、そうではありません。上の例のように「あいうえお」という文字列に対して開始位置のインデックスに「1」と指定した場合、「い」が対象となります。切り取る文字数も開始位置と同様マルチバイトを考慮する必要はありませんので、開始位置のインデックスに「1」、文字数に「3」を指定した場合は「いうえ」の3文字が切り取られることになります。マルチバイト文字であることを意識せずに切り取りが可能ということですね。

まとめ

文字列を切り取るにはStringSubstr関数を使用する
第一引数は切り取り対象の文字列
第二引数は切り取り開始インデックス
第三引数は切り取り文字数、省略した場合は最後の文字まで切り取り
戻り値は切り取った文字列
日本語(マルチバイト文字)も切り取り可能

参考URL

StringSubstr – MQL4 Reference
https://docs.mql4.com/strings/stringsubstr