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){ ・・・・ }