第六章ファイル操作

ここでは、「第六章ファイル操作」 に関する記事を紹介しています。
◎ 注意事項

右中央部に「シグナル配信」として、チャートを載せていますが、自動更新できるか? 表示速度は? などのTESTに使用しているだけです。
本ブログの掲載情報に基づいて取引を行い、被った損害について本ブログ及び管理人は一切の責任を負えませんのでご了承下さい。


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
配列をバイナリファイルへ書き込む 


int FileWriteArray( int handle, object array[], int start, int count)

int型、bool型、datetime型、color型の配列は4バイト整数値として各要素毎に書き出される。
double型の配列は8バイトの倍精度少数として各要素毎に書き出される。
string型の配列は、各要素の終端に"\r\n"が自動的に追加され、文字列として書き出される。
書き出された要素数を返し、もしエラーが起きれば、負の数が帰ってくる。

Parameters:

handle - FileOpen()関数によって返されたファイルハンドル
array[] - 配列
start - 書き出し始める要素番号
count - 書き出す数



Sample:

int handle;
double BarOpenValues[10];
// copy first ten bars to the array
for(int i=0;i<10; i++)
BarOpenValues[i]=Open[i];
// writing array to the file
handle=FileOpen("mydata.dat", FILE_BIN|FILE_WRITE);
if(handle>0)
{
FileWriteArray(handle, BarOpenValues, 3, 7); // writing last 7 elements
FileClose(handle);
}



解説:

”mydata.dat”をバイナリモードで書き込み専用で開く。
配列”BarOpenValues”に入っている始値を3要素目から7個分”mydata.dat”へ書き込む。
ファイルを閉じる。

スポンサーサイト
バイナリファイルを配列に読み込む


int FileReadArray( int handle, object &array[], int start, int count)

バイナリファイルから指定された要素数だけ配列に読み込む。
実際に読み込まれた要素数を返す。

Parameters:

handle - FileOpen()関数によって返されたファイルハンドル
array[] - データを保存する配列
start - 配列の保存を開始する位置
count - 読み込む要素数




Sample:

int handle;
double varray[10];
handle=FileOpen("filename.dat", FILE_BIN|FILE_READ);
if(handle>0)
{
FileReadArray(handle, varray, 0, 10);
FileClose(handle);
}



解説:

”filename.dat”をバイナリモードで読み込み専用で開く。
配列”varray”に始めから10個を読み込む

ヒストリカルデータファイルを開く


int FileOpenHistory( string filename, int mode, int delimiter=';')

現在のヒストリーディレクトリ(terminal_directory\history\server_name)またはそのサブフォルダ内のファイルを開く。成功すればファイルハンドルを、失敗すれば-1を返す。
Parameters:

filename - ファイル名
mode - オープンモード。
FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITEの組み合わせが使える。
delimiter - CSVファイルの区切り文字。デフォルトでは';'が使われる。



Sample:

int handle=FileOpenHistory("USDX240.HST",FILE_BIN|FILE_WRITE);
if(handle<1)
{
Print("Cannot create file USDX240.HST");
return(false);
}
// work with file
// ...
FileClose(handle);



解説:

変数「handle」に「ファイル名:USDX240.HST , 書き込み専用」
のファイルハンドルを代入する。
もし、存在しなければ"Cannot create file USDX240.HST"とエラーコードを表示する。
ファイルを閉じる

この関数は、メタトレーダーに無い通貨や時間枠を作成するときに有効である。
ファイルの行端を調べる


bool FileIsEnding( int handle)

CSVファイルにおいて、ファイルの最終行に達したらTRUEを、それ以外はFALSEを返す

Parameters:

handle - FileOpen()関数によって返されたファイルハンドル



Sample:


if(FileIsLineEnding(h1))
{
FileClose(h1);
return(false);
}



解説:

"h1"のファイルハンドルのファイルの行端に達したらファイルを閉じる

ファイルの終端を調べる


bool FileIsEnding( int handle)

ファイルの終端に達したらTRUEを、それ以外はFALSEを返す。
もし読み込み中にファイルの終端に達したら、GetLastError()関数はERR_END_OF_FILE (4099)エラーを返す。

Parameters:

handle - FileOpen()関数によって返されたファイルハンドル




Sample:

if(FileIsEnding(h1))
{
FileClose(h1);
return(false);
}




解説:

"h1"のファイルハンドルのファイルの終端に達したらファイルを閉じる

ファイルを削除する

void FileDelete( string filename)

指定されたファイルを削除する

Parameters:

filename - ファイルへのパス


Sample:

int lastError;
FileDelete("my_table.csv");
lastError=GetLastError();
if(laseError!=ERR_NOERROR)
{
Print("An error ocurred while (",lastError,") deleting file my_table.csv");
return(0);


解説:

ファイル名「my_table.csv」を削除する。
もし変数「laseError」がノーエラーではなかったら
エラー値を表示する。
ファイル関数取り扱いの注意点

・ファイルの置き場所
 メタトレーダーには以下のファイルを置くディレクトリ(サブディレクトリ)がある

 ・../HISTORY/(業者)
 ・../EXPERTS/FILES
 ・../TESTER/FILES

 メタトレーダーでは上記以外のディレクトリのファイルは扱えない

【重要】
・開くモードによるデータ消去の危険性
 既に存在しているファイルに追記したい場合
 FILE_WRITE が FILE_READ と組み合わされていなければ
 データは消去される。
※つまり、読み込みを行った後(FILE_READ)書き込み(FILE_WRITE)を行わないと
 データが消去されてしまう。


・実行モジュール内で32個以上のファイルを同時に開くことはできない
・同一モジュールで開かれたファイルハンドルは、他のモジュールやライブラリに渡すことはできない。
ファイルを閉じる


void FileClose( int handle)

FileOpen()関数によって開いたファイルを閉じる。


Parameters:

handle - FileOpen()関数によって返されたファイルハンドル



Sample:

  int handle=FileOpen("filename", FILE_CSV|FILE_READ);
if(handle>0)
{
// working with file ...
FileClose(handle);
}


解説:

変数「handle」に「ファイル名:filename , CSV形式で読み込み専用 , 区切り文字(;)を使用」
のファイルハンドルを代入する。
もし変数「handle」が0より上なら変数「handle」のファイルを閉じる
ファイルを開く


int FileOpen( string filename, int mode, int delimiter=';')

入力、出力用のファイルを開く。成功すればファイルハンドルを、失敗すれば-1を返す。
Parameters:

filename - ファイル名
mode - オープンモード。
FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITEの組み合わせが使える。
delimiter - CSVファイルの区切り文字。デフォルトでは';'が使われる。



Sample:

int handle;
handle=FileOpen("my_data.csv",FILE_CSV|FILE_READ,';');
if(handle<1)
{
Print("File my_data.dat not found, the last error is ", GetLastError());
return(false);
}


解説:

変数「handle」に「ファイル名:my_data.csv , CSV形式で読み込み専用 , 区切り文字(;)を使用」のファイルハンドルを代入する。
もし、存在しなければ"File my_data.dat not found, the last error is "とエラーコードを表示する。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。