nicowang 發表於 13-6-25 14:03

請問 AB 中如何定如 VB 的全域變數

本帖最後由 nicowang 於 13-6-25 14:04 編輯

如題

小弟需要在AB中設一個全域變數 GLOBAL ,一直持續累計計算,

但實際在AB中,AB會要初始這個變數,結果每次啟動這變數就被歸零 (初始化)

所以之前的計算就不見了 ... >"<

電腦人 發表於 13-6-25 16:42

本帖最後由 電腦人 於 13-6-25 16:59 編輯

VB 每次啟動,全域變數照樣歸零

我的解決方式是把全域變數"存成文字檔",然後要調用時,去"讀取文字檔"

類似遊戲的SAVE/LOAD記錄

AMIBROKER有讀取文字檔這功能嗎?不知

MULTICHARTS好像也只有輸出文字檔,我沒看過有讀入文字檔的功能

所有的全域變數只在程式啟動期間具有生命力,重啟程式後當然是歸零

lwhuang 發表於 13-6-25 17:50

在程式生命週期
http://www.amibroker.com/guide/keyword/global.html
要是在生命週期外,就真的要read file

lwhuang 發表於 13-6-25 17:51

讀檔
http://www.amibroker.com/guide/afl/afl_view.php?id=228

lu0811 發表於 13-6-25 18:33

好問題,推一下。

calvinhorng 發表於 13-6-25 19:38

StaticVarGet( ''varname', align = True' )
StaticVarSet( ''varname'', value )

ex.
X=Nz(StaticVatGet("VaribleX"))

X can be processed within formula

at the end of formula

StaticVarSet("VaribleX", X)

nicowang 發表於 13-6-25 20:21

本帖最後由 nicowang 於 13-6-25 20:23 編輯

謝謝大大們回答,我會試試看

nicowang 發表於 13-6-25 20:22

本帖最後由 nicowang 於 13-6-25 20:23 編輯

電腦人 發表於 13-6-25 16:42 static/image/common/back.gif
VB 每次啟動,全域變數照樣歸零

我的解決方式是把全域變數"存成文字檔",然後要調用時,去"讀取文字檔"

VB 的全域變數可以再 module 中宣告,之後所有的method 就都可以共用,不會init

nicowang 發表於 13-6-25 20:24

calvinhorng 發表於 13-6-25 19:38 static/image/common/back.gif
StaticVarGet( ''varname', align = True' )
StaticVarSet( ''varname'', value )



感謝 ... 我待會試試看

nicowang 發表於 13-6-25 20:32

本帖最後由 nicowang 於 13-6-25 20:36 編輯

lwhuang 發表於 13-6-25 17:50 static/image/common/back.gif
在程式生命週期
http://www.amibroker.com/guide/keyword/global.html
要是在生命週期外,就真的要read fil ...
謝謝大大 ... 這段我看過,但一樣會被初始化

感謝 ^^

不過像 calvinhorng 大大提供的方式,丟到 static 去,需要再取回,可以一試。

電腦人 發表於 13-6-25 23:37

本帖最後由 電腦人 於 13-6-25 23:42 編輯

nicowang 發表於 13-6-25 20:22 static/image/common/back.gif
但實際在AB中,AB會要初始這個變數,結果每次啟動這變數就被歸零 (初始化)

...
並不是 在所有method可以共用,指的是在"整個程式執行時間"可以共用

但只要你關閉程式,然後再開一次程式(每次重新啟動程式)時,此時你的全域變數仍然是在初始狀態

所以唯一解就是需要一個外部變數記住這個變數目前的值

當然,不關掉程式的話,設好的全域變數是不會被清掉的,除非是程式不支援全域變數或是設定錯誤

在MULTICHARTS上的全域變數是自動判別的,但只要你程式重新編譯或載入一次,對不起,系統一樣把你的全域變數歸零,沒得商量

AB就真的沒研究了

但你有提到VB,VB上的解就很簡單,存個文字檔保留就好,你關機關程式關電源後,再重新啟動程式,一樣可以到磁碟去讀去之前的資料,此時全域變數就可以用這技巧不被破壞。

AB這個軟體是否有DEBUG工具,用類似單步執行的方式去看變數是怎麼被讀寫的,這樣最快

nicowang 發表於 13-6-26 02:43

電腦人 發表於 13-6-25 23:37 static/image/common/back.gif
並不是 在所有method可以共用,指的是在"整個程式執行時間"可以共用

但只要你關閉程式,然後再開一次程式 ...

了解, 感謝大大回答
AB的DEBUG能力好像不強,也許我初學還不清楚,所以先保留說法,待日後驗證。

calvinhorng 發表於 13-6-26 06:33

nicowang 發表於 13-6-26 02:43 static/image/common/back.gif
了解, 感謝大大回答
AB的DEBUG能力好像不強,也許我初學還不清楚,所以先保留說法,待日後驗證。
...

建議你看一下 http://www.amibroker.com/members/library/formula.php?id=1225
裡面有變數與Debug的使用

lwhuang 發表於 13-6-26 07:59

nicowang 發表於 13-6-25 20:32 static/image/common/back.gif
謝謝大大 ... 這段我看過,但一樣會被初始化

感謝 ^^


一般語言的全域變數所指,都是這樣啊
你要的是應該是像ini檔那樣的東西,那不叫全域變數

lwhuang 發表於 13-7-4 16:17

http://www.amibroker.org/userkb/2007/04/24/persistent-variables/
頁: [1] 2
查看完整版本: 請問 AB 中如何定如 VB 的全域變數