無料でロボットをダウンロードする方法を見る
Facebook上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
記事を気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
スクリプト

Demo_FileTell - MetaTrader 5のためのスクリプト

ビュー:
784
評価:
(33)
パブリッシュ済み:
2016.09.29 12:23
アップデート済み:
2016.11.22 07:34
\MQL5\Files\Data\
file.txt (0.1 KB) ビュー
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

このスクリプトは、テキストファイルを開いてファイル内の文字列の開始点の位置を分析して乱数とともに文字列のテキストを表示します。ファイル内の各文字列の開始位置の配列を受信するにはGetStringPositions()関数が書かれています。この関数は、「InpEncodingType」入力パラメータで指定されるファイルエンコードの種類を考慮して文字列の開始点を検索します。

FileTell() 関数に加えて、このスクリプトはエンコードの種類の取得にFileGetInteger()関数、ファイルの終わりの定義にFileIsEnding()関数、ランダムな番号を文字列で表示するときにファイル内のキャリッジの位置を移動するのにFileSeek()関数を使います。

コード:

//--- スクリプトの起動時に入力パラメータのウィンドウを表示する
#property script_show_inputs
//--- 入力パラメータ
input string InpFileName="file.txt";    // ファイル名
input string InpDirectoryName="Data";   // ディレクトリ名
input int    InpEncodingType=FILE_ANSI; // ANSI=32またはUNICODE=64
//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 乱数を生成するための変数の値を指定する
   _RandomSeed=GetTickCount();
//--- 文字列の開始位置のための変数
   ulong pos[];
   int   size;
//--- エラー値をリセットする
   ResetLastError();
//--- ファイルを開く
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_TXT|InpEncodingType);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s file is available for reading",InpFileName);
      //--- ファイル内の各文字列の開始位置を受け取る
      GetStringPositions(file_handle,pos);
      //--- ファイル内の文字列の数を定義する
      size=ArraySize(pos);
      if(!size)
        {
         //--- ファイルに文字列がない場合は停止する
         PrintFormat("%s file is empty!",InpFileName);
         FileClose(file_handle);
         return;
        }
      //--- 文字列番号をランダムに選ぶ
      int ind=MathRand()%size;
      //--- 位置を文字列の始めにシフトする
      FileSeek(file_handle,pos[ind],SEEK_SET);
      //---  ind 番号で文字列を読んで出力する
      PrintFormat("String text with %d number: \"%s\"",ind,FileReadString(file_handle));
      //--- ファイルを閉じる
      FileClose(file_handle);
      PrintFormat("%s file is closed",InpFileName);
     }
   else
      PrintFormat("Failed to open %s file, Error code = %d",InpFileName,GetLastError());
  }
//+-------------------------------------------------------------------------------+
//| この関数はファイル内の文字列の開始点を定義して  |
//| 配列に格納する                                                     |
//+-------------------------------------------------------------------------------+
void GetStringPositions(const int handle,ulong &arr[])
  {
//--- デフォルトの配列サイズ
   int def_size=127;
//--- 配列へのメモリ追加
   ArrayResize(arr,def_size);
//--- 文字列カウンタ
   int i=0;
//--- これがファイルの最後でない場合、少なくても 1 つの文字列がある
   if(!FileIsEnding(handle))
     {
      arr[i]=FileTell(handle);
      i++;
     }
   else
      return; // ファイルが空なので終了する
//--- エンコーディングに応じてバイト単位のシフトを定義する
   int shift;
   if(FileGetInteger(handle,FILE_IS_ANSI))
      shift=1;
   else
      shift=2;
//--- ループで文字列をみる
   while(1)
     {
      //--- 文字列を読み込む
      FileReadString(handle);
            //--- ファイルの終わりをチェックする
      if(!FileIsEnding(handle))
        {
         //--- 文字列の次の位置を格納する
         arr[i]=FileTell(handle)+shift;
         i++;
         //--- オーバーフローしている場合は、配列のサイズを増やす
         if(i==def_size)
           {
            def_size+=def_size+1;
            ArrayResize(arr,def_size);
           }
        }
      else
         break; // ファイルの終わり。終了する。
     }
//--- 配列の実際のサイズを定義する
   ArrayResize(arr,i);
  }

MetaQuotes Ltdによってロシア語から翻訳されました。
元のコード: https://www.mql5.com/ru/code/1634

Demo_FileSize Demo_FileSize

このスクリプトはFileSize() 関数の使用例を実証します。

Demo_FileReadDouble Demo_FileReadDouble

この指標はFileReadDouble() 関数の使用例を実証します。

Demo_FileWriteInteger Demo_FileWriteInteger

このスクリプトはFileWriteInteger()関数の使用例を実証します。

Demo_FileReadInteger Demo_FileReadInteger

この指標はFileReadInteger() 関数の使用例を実証します。