MT4でのCSVファイルからの読み込み

昨日に引き続き、基礎基礎事項。。。

CSVファイルへの書き込みの時には特に考えていなかったんだけど、久しぶりにCSVファイルから読み込もうと思ったら5分くらい考えこんでしまったのでメモ。

Metatraderのファイル関数を調べると、1行読み込む関数がどれなのか分からなかった。
C言語ならfgets()を使用して次のように書くと思う*1

FILE *fp;
char *fname = "file.txt";
int c;
fp = fopen( fname, "r" );
while ( fgets(readline, N, fp) != NULL ) {
   //処理
}

JavaならreadLine()を使用して次のように書く*2

String file_name = "file.txt";

try{
  File file = new File(file_name);
  FileReader filereader = new FileReader(file);
  BufferedReader br = new BufferedReader(filereader);
  String line;
  while ((line = br.readLine()) != null) {
       //処理
  }
}catch(FileNotFoundException e){
   //処理
}

Metatraderでも1行ずつ読み込む関数を探して、FileReadStringに辿り着いたが戻り値が取得した文字で、その後ポインタがどうなるのかよく分からなくて、結局FileIsEnding()でファイルの終端かどうかを判定して次のように書いた。でも、他の人は違う書き方している気がする・・・。
FileReadStringは文字列を読む取るだけで、1行単位で読み取る訳ではない。例えば、カンマ区切りで「1,STR1,STR2」という1行が入力されているCSVファイルをFileReadStringで読み込んだ場合、最初に「1」が、次に「STR1」が、そしてその次に「STR2」が読み取られる。

string mysqlConnectInfo = "";
while(!FileIsEnding(mysqlFileHandle)){
    mysqlConnectInfo = FileReadString(mysqlFileHandle);
    Print(mysqlConnectInfo);
}

ちなみに、下記のように条件判断を書いたら怒られた・・・。
これ、駄目なのか。まだまだMQLについては勉強不足。

while((mysqlConnectInfo = FileReadString(mysqlFileHandle)) != NULL){
    ・・・・
}

*1:コンパイルしていないイメージコード

*2:コンパイルしていないイメージコード