無料でロボットをダウンロードする方法を見る
Twitter上で私たちを見つけてください。
私たちのファンページに参加してください
私たちのファンページに参加してください
記事を気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
Demo_FileTell - MetaTrader 5のためのスクリプト
- ビュー:
- 816
- 評価:
- パブリッシュ済み:
- 2016.09.29 12:23
- アップデート済み:
- 2016.11.22 07:34
- このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動
このスクリプトは、テキストファイルを開いてファイル内の文字列の開始点の位置を分析して乱数とともに文字列のテキストを表示します。ファイル内の各文字列の開始位置の配列を受信するには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
このスクリプトはFileSize() 関数の使用例を実証します。
Demo_FileReadDoubleこの指標はFileReadDouble() 関数の使用例を実証します。
Demo_FileWriteInteger
このスクリプトはFileWriteInteger()関数の使用例を実証します。
Demo_FileReadIntegerこの指標はFileReadInteger() 関数の使用例を実証します。