ライブラリ: MQL5での正規表現の動作の為のRegularExpressions

 

MQL5での正規表現の動作の為のRegularExpressions:

正規表現は、迅速かつ柔軟なテキストの処理の為の正式言語です。各正規表現は、正規表現エンジンが入力テキスト内で一致するものを検索するテンプレート(マスク)です。パターンは、一個以上の文字リテラルや演算子、構成体で構成されています。

また、ライブラリと一緒に一度にテストケースの役割を実行するいくつかのデモンストレーション例が含まれています。全ての例はMicrosoft Corporationの公式サイトより転載されており、これらの例はC#正規表現とMQL5での使用の特徴との、主要な違いを明確に示しています。

ライブラリの使用には、\MQL5\Include\RegularExpressions\ディレクトリのRegex.mqhファイルをあなたのコードに接続する必要があります。

MQL5の為のRegularExpressionsを使った作業例:

正規表現を使った例として、ターミナルからhtmlファイル形式でダウンロードされた取引履歴の解析を見てみましょう。ザを作成します。

このドキュメントは二つの主要テーブル(『注文』と『取引』)を含んでいます。 

ファイル解析の為の正規表現を作成します。

Regex *rgx=new Regex("(>)([^<>]*)(<)");

この正規表現を見ていきましょう。

(>)
'>'文字の検索
(^[<>]*)
'>'と'<'以外の0または1回以上繰り返す任意の文字
(<)
'<'文字の検索

次に、行ごとにファイルを読み込み、この正規表現に当てはまる全ての一致を取得します。

string str=FileReadString(m_handel);
MatchCollection *matches=rgx.Matches(str);

『注文』と『取引』テーブルのレコード(タプル)であるHTMLファイルの行では、このような一致は一番多く、特に23と27の一致になります。つまり、あとはこれらの行から私達に必要な全ての情報を引き出すだけです。

『注文』テーブル:

if(matches.Count()==23)
  {
   
string in[11];
   for(int i=0,j=1; i<11; i++,j+=2)
     {
      in[i]=StringSubstr(matches[j].Value(),1,StringLen(matches[j].Value())-2);
     }
   m_list1.Add(new OrderRecord(in));
  }

私達は一致数は23と確認したので、次に『注文』テーブルのレコードに移ります。私たちのレコードの最初の表現として、文字列の配列を作成します。全ての奇数の一致を通過し、matches[j][.Value()メソッドを使いこれらの一致の値を取得します。そして、'>'と'<'のシンボルに対応する最初と最後のシンボルを一致したものから切り離します。フォーマットされた一致をそれぞれ、以前に宣言されている配列inに入れます。次に、『注文』テーブルの一つのレコードを表示するOrderRecord(in)クラスの新しいインスタンスを作成し、それをm_list1リストへ追加します。このリストは『注文』テーブルを解釈します。

同様に、『取引』テーブルも処理します。

if(matches.Count()==27)
  {
   string in[13];
   for(int i=0,j=1; i<13; i++,j+=2)
     {
      in[i]=StringSubstr(matches[j].Value(),1,StringLen(matches[j].Value())-2);
     }
   m_list2.Add(new DealRecord(in));
  }

ここではm_list2 は、 DealRecordクラスへのポインタのリストで、今度は『取引』テーブルを表示します。

これらの二つのリストはTradeHistoryクラスのメンバーです。このクラスは私たちの全てのHTMLソースファイルの表現です。また、FindAllOrders(const int columnIndex,const T value)FindAllDeals(const int columnIndex,const T value)メソッドを使用して『注文』や『取引』テーブルに簡単なフィルタを適用することができます。

私たちのエキスパートアドバイザに、これらの機能をデモンストレーションする為の簡単なグラフィックインターフェースを作成しましょう。



作者: MetaQuotes Software Corp.

理由: