2015年7月18日 星期六

函數(_readFile):讀取文字檔_利用ELCollections.dll


在 MultiCharts 中要把一些所需的資訊輸出出去,存成文字檔(.txt)的形式,內建於 MultiCharts 的 fileappend 與 print 指令都能順利辦到。另外,國內有凌波大分享的 outputfile.dll 與 下單大師的 omSignTXT.dll 可供使用,更能提供比內建指令更好的穩定性,避免檔案讀取權限被鎖住的問題。

但是從外部文字檔讀取資訊進來給 MultiCharts 使用,就沒有內建的指令可以使用了,在凱衛官方網站上,有網友 bodrigs 分享自製工具,我有使用一段時日,但是如果欲讀取文字檔不存在的話,會導致整個 MultiCharts 整個 crash 掉,算是使用該資源的一項風險。其後,又有網友 swwang1999 分享相同功能的資源,說是即使讀取文字檔失敗,也不會造成 MultiCharts 當掉。不過,幾經實驗,我依然不得要領。



經過一番 Google 後發現,原來安裝了 ADE 就會得到的 ELCollections.dll ,也可以用來讀取文字檔(資訊來源)。經過測試後,這個功能就算讀取文字檔失敗也不會造成 MultiCharts 當掉,只會出現個錯誤訊息,並且讓引用這功能的指標或訊號 OFF 掉而已,不會影響其他的圖表運作,相對安全。

由於要讀取文字檔內容,需要經過 ADE 套件中的三個函數依序協做,我乾脆把這幾個需要用到的函數內容複製出來做一些修改,合併成一個好方便使用,函數(_readFile,數值型)程式碼如下:
external method: "C:\AutoTrading\ELCollections_x64.dll", double, "ListN_New";
external method: "C:\AutoTrading\ELCollections_x64.dll", int, "ListN_ReadFile", double, LPSTR;
external method: "C:\AutoTrading\ELCollections_x64.dll", double, "ListN_Get", double, int;
external method: "C:\AutoTrading\ELCollections_x64.dll", int, "ListN_Clear", double;


Inputs: FileName(string), Index(Numeric);
Vars: ID(ListN_New);


ListN_ReadFile(ID, FileName);

_readFile = ListN_Get(ID, Index);

ListN_Clear(ID);

要使用這個函數的時候需要兩個參數,_readFile(A, B)。A:文字檔的名稱,需包含路徑、B:讀取文字檔中的第幾行。使用範例如下,我用一個指標做這件事情,請自行參考。


因為這個 _readFile 函數需要使用到 ELCollections.dll,而 ADE 有分 x64、x32 的版本不同,我自己使用 x64 的,如果你不想為了這個功能就去做整個 ADE 的安裝工程的話,我把 ELCollections.dll 複製出來,跟函數 _readFile 的 pla 檔一同打包在一起提供下載。下載點:download from DropBox

解壓縮開後,需要把 ELCollections_x64.dll 放到 C:\AutoTrading\ 之下,因為函數 readFile 的程式碼已經指向了這個路徑。或者你得修改程式碼內容(參照上方程式碼中藍色字)去對應好,看你把 ELCollections_x64.dll 放在哪邊去了。

注意:本函數的調用,被讀取的文字檔內容中,必須全部內容都是數字,不可含有字母、空格或是其他符號,可分多行,一如上圖中的 123.txt 那樣。另外,被讀取的文字檔,不可以用 FileAppend 去寫,會發生權限打架而導致失敗。

熱門文章