奇狐社區論壇 總頁數 (2): [1] 2 »
在這個頁面顯示本主題全部的 16 個文章

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- [問題]奇狐支援的VBS是否有字數限制? (http://www.chiefox.com.tw/bbs/showthread.php?threadid=11817)


由 KV1566 在 2009-07-17 12:59 發表:

[問題]奇狐支援的VBS是否有字數限制?

我在寫指標公式時用到了VBS,因為程式內容很長,長到了400多條程式碼,每條程式碼還都有部份是用冒號串連起來的,

我寫一小段就會停下來離開編輯檢查結果,後來,寫到相當大數量的程式碼後,突然發生錯誤訊息!

我以為程式碼有誤,檢查了半天卻沒發現問題!因為程式碼中有加入註解,索性將一些註解的內容簡化以減少字數,結果,竟然程式又正常可以執行了!

之後我繼續增加VBS程式碼,很快又出現問題!我再將程式碼中可以精簡的部份做小幅度精簡,結果就又可以執行了!

感覺上,好像是VBS達到一定的字數(比較可能)或指令數(比較不可能,因為我刪減註解也可以達到目的)後,便會出現錯誤訊息!

請問,
1、奇狐是否有VBS程式碼字數的限制?
2、若是有,限制是多少字?
3、而若是真有字數限制,卻又非得增加VBS程式碼時,要如何解決?

謝謝!


由 cgjj 在 2009-07-17 14:40 發表:

回覆: [問題]奇狐支援的VBS是否有字數限制?

引用:
最初由 KV1566 發表
我在寫指標公式時用到了VBS,因為程式內容很長,長到了400多條程式碼,每條程式碼還都有部份是用冒號串連起來的,

我寫一小段就會停下來離開編輯檢查結果,後來,寫到相當大數量的程式碼後,突然發生錯誤訊息!

我以為程式碼有誤,檢查了半天卻沒發現問題!因為程式碼中有加入註解,索性將一些註解的內容簡化以減少字數,結果,竟然程式又正常可以執行了!

之後我繼續增加VBS程式碼,很快又出現問題!我再將程式碼中可以精簡的部份做小幅度精簡,結果就又可以執行了!

感覺上,好像是VBS達到一定的字數(比較可能)或指令數(比較不可能,因為我刪減註解也可以達到目的)後,便會出現錯誤訊息!

請問,
1、奇狐是否有VBS程式碼字數的限制?
2、若是有,限制是多少字?
3、而若是真有字數限制,卻又非得增加VBS程式碼時,要如何解決?

謝謝!



目前版本奇狐單一公式最大能寫到 128KB
大多數的應用應該已經非常足夠了

其實奇狐內建的語法, 就可以處理大多數的程序
且速度大都比用 VBS 處理來的快

VBS是否有限制, 這要問問技術核心人員
這幾天聯絡上後, 才能答覆您


由 KV1566 在 2009-07-17 14:57 發表:

回覆: 回覆: [問題]奇狐支援的VBS是否有字數限制?

引用:
最初由 cgjj 發表
目前版本奇狐單一公式最大能寫到 128KB
大多數的應用應該已經非常足夠了

其實奇狐內建的語法, 就可以處理大多數的程序
且速度大都比用 VBS 處理來的快

VBS是否有限制, 這要問問技術核心人員
這幾天聯絡上後, 才能答覆您


謝謝回覆!

我是在寫高低折線圖,用奇狐內建語法,我想了好久都沒能順利寫出!
奇狐的DRAWLINE是從一個合乎條件的點畫到另一個合乎條件的點,而該另一個合乎條件的點一旦被使用,就無法在同一條指令中再從該根k線的另一個高或低點位置繼續與下一個高低點做連線,所以必須用其他變通的方式寫!

我用程式邏輯極度壓縮減少程式碼數量,最後終於還是完成了!用VBS完成了,運算顯示速度上很好,選擇指標後立刻就會正常出現高低折線圖,不會因為使用VBS而延遲!只是,字數限制上,也讓我無法再對其做額外的處理了!

不過,還好終究是完成了!額外需要做的處理應該就可以用奇狐內建語法來處理!但是,若有能夠解決VBS字數限制的方法,那當然更好了!

這問題已經暫時不急!靜待您的答覆,謝謝!


由 cgjj 在 2009-07-17 15:07 發表:

回覆: 回覆: 回覆: [問題]奇狐支援的VBS是否有字數限制?

引用:
最初由 KV1566 發表
謝謝回覆!

我是在寫高低折線圖,用奇狐內建語法,我想了好久都沒能順利寫出!
奇狐的DRAWLINE是從一個合乎條件的點畫到另一個合乎條件的點,而該另一個合乎條件的點一旦被使用,就無法在同一條指令中再從該根k線的另一個高或低點位置繼續與下一個高低點做連線,所以必須用其他變通的方式寫!

我用程式邏輯極度壓縮減少程式碼數量,最後終於還是完成了!用VBS完成了,運算顯示速度上很好,選擇指標後立刻就會正常出現高低折線圖,不會因為使用VBS而延遲!只是,字數限制上,也讓我無法再對其做額外的處理了!

不過,還好終究是完成了!額外需要做的處理應該就可以用奇狐內建語法來處理!但是,若有能夠解決VBS字數限制的方法,那當然更好了!

這問題已經暫時不急!靜待您的答覆,謝謝!



奇狐有畫折線的函數唷, 就是 POLYLINE
另外 DRAWSL 亦可畫線
試試吧


由 KV1566 在 2009-07-17 15:25 發表:

回覆: 回覆: 回覆: 回覆: [問題]奇狐支援的VBS是否有字數限制?

引用:
最初由 cgjj 發表
奇狐有畫折線的函數唷, 就是 POLYLINE
另外 DRAWSL 亦可畫線
試試吧


底下這張圖是我用VBS搭配計算畫出來的高低折線圖,其中,必須對「母子」線及「子母」線組合做處理!

請問,POLYLINE可以畫出來嗎?

POLYLINE兩個參數,一個是符合的條件,一個是價位數列
如果我將處理完的轉折價位放入數列中,當遇到子母、母子,且有可能要在其該根K線的高點及低點同時往左往右畫出與其他高低點連結的線條時,如何用POLYLINE辦到?!

這個函數比較不熟,尚請指導!謝謝!


由 cgjj 在 2009-07-17 19:36 發表:

回覆: 回覆: 回覆: 回覆: 回覆: [問題]奇狐支援的VBS是否有字數限制?

引用:
最初由 KV1566 發表
底下這張圖是我用VBS搭配計算畫出來的高低折線圖,其中,必須對「母子」線及「子母」線組合做處理!

請問,POLYLINE可以畫出來嗎?

POLYLINE兩個參數,一個是符合的條件,一個是價位數列
如果我將處理完的轉折價位放入數列中,當遇到子母、母子,且有可能要在其該根K線的高點及低點同時往左往右畫出與其他高低點連結的線條時,如何用POLYLINE辦到?!

這個函數比較不熟,尚請指導!謝謝!



您有同根是低轉折又是高轉折的狀況
故無法用POLYLINE處理


由 cgjj 在 2009-07-17 19:38 發表:

但是可以用 DRAWSL 來處理, 範例如下:


//==================模擬區段開始===================
ZZ:=ZIG(4,3);
HP:=ZZ>ref(ZZ,1) and ZZ>refx(ZZ,1); //轉折高點
LP:=ZZ<ref(ZZ,1) and ZZ<refx(ZZ,1); //轉折低點
//當 HP=1 和 LP=1 , 則 SS=1 代表轉折高低點在同根K棒
SS:=LP and mod(sum(LP,0),4)=0;
HP:=HP or SS; //當SS=1時, 讓 HP=LP
LP:= LP or ref(SS,1); //當SS=1, 將次根設為轉折低點
//==================模擬區段終止===================
//此區段為模擬的假狀況
//實際狀況請自行替代帶入,接下面三行
// HP:=轉折高點;
// LP:=轉折低點;
// SS:=HP and LP;

CK:=HP or LP;
SP:=ref(BARSLAST(CK),1)+1;
CK1:=CK and ref(SS,1)=0; //一般畫法
CK2:=CK and ref(SS,1)=1; //特殊畫法
MM1:=if(LP,L,H); //轉折價1
MM2:=if(LP,H,L); //轉折價2(同根用)
VERTLINE(SS) linedot color888888; //標示同根轉折K棒
DRAWSL(CK1,MM1,(MM1-ref(MM1,SP))/SP,-SP,1) COLORYELLOW;
DRAWSL(CK2,MM1,(MM1-ref(MM2,SP))/SP,-SP,1) COLORYELLOW;
STICKLINE(SS,MM1,MM2,0.1,0) COLORYELLOW;


由 KV1566 在 2009-07-17 21:28 發表:

引用:
最初由 cgjj 發表
[B]但是可以用 DRAWSL 來處理, 範例如下:


嗯,再次感謝!我找時間再來試試這種寫法,謝謝!


由 cgjj 在 2009-07-30 14:26 發表:

已得到答覆了

並非是限制造成的
是系統的 Bug , 新版會修正此問題

謝謝您!


由 KV1566 在 2009-07-30 14:59 發表:

引用:
最初由 cgjj 發表
已得到答覆了
並非是限制造成的
是系統的 Bug , 新版會修正此問題
謝謝您!


謝謝您繼續關懷回覆此問題!等待更版的好消息!

從那天之後,我有試著將之改為奇狐系統內建的For...do begin及If...then begin來處理,
所有的程式邏輯通通不變,只是由VBScript修過來而已,
結果發現,用VBScript寫出來的執行速度,竟然還是比內建方式寫出來的快!

看來,有些時候還是得用VBScript來處理會比較好!

期待更版中。。。


由 cgjj 在 2009-07-30 15:20 發表:

引用:
最初由 KV1566 發表
謝謝您繼續關懷回覆此問題!等待更版的好消息!

從那天之後,我有試著將之改為奇狐系統內建的For...do begin及If...then begin來處理,
所有的程式邏輯通通不變,只是由VBScript修過來而已,
結果發現,用VBScript寫出來的執行速度,竟然還是比內建方式寫出來的快!

看來,有些時候還是得用VBScript來處理會比較好!

期待更版中。。。



檢查看看

For...do begin 中
是否有用到 if(cond,a,b) 這樣的式子
有的話一定會慢
因為 if(cond,a,b) 是專責處理數列用的
不適合放入 For...do begin 之中

在 For...do begin 中, 要讓其都是元素對元素運算
迴圈中把 if(cond,a,b) 改為 if ...then ...else 會快上非常多

當然也要視您算的東西
有些處理程序 VBScript 還是有它的優勢在

迴圈中只要堅守都是元素對元素的運算
能不在迴圈中處理的, 就以數列對數列在迴圈外部先行處理好
真需要迴圈的再帶入計算
如此速度就可大幅提升


由 alpha 在 2009-07-30 18:02 發表:

測試過了慢也不會慢多少
快也不會快多少

======== 1.406 秒

C1:=C;
B12:=C*0;

for w2 = 1 to 30 do begin
for w = 2 to datacount do begin
if C1[w] > C1[w-1] then begin
B12[w]:=1;
end;
end;
end;

======= 1.641 秒

for w2 = 1 to 30 do begin
J:=1;
<%
C1 = FFL.VarData("C1")
B12 = FFL.VarData("B12")
lb = lbound(C1)+1
ub = ubound(C1)

for w = lb to ub
if C1(w) < C1(w-1) then B12(w)= 1
next

FFL.VarData("C1") =C1
FFL.VarData("B12")=B12

%>

end;


=======1.31 秒 ( 雙迴圈 皆在 VBS 裡面, 少了 29 次的 VarData() 轉換)

<%
C1 = FFL.VarData("C1")
B12 = FFL.VarData("B12")
lb = lbound(C1)+1
ub = ubound(C1)

for w2 = 1 to 30
for w = lb to ub
if C1(w) < C1(w-1) then B12(w)= 1
next
next

FFL.VarData("C1") =C1
FFL.VarData("B12")=B12

%>

__________________
偶而是不是也感覺有些老
像個大人般的戀愛
有時心情糟
請你相信我在你身邊別忘了


由 cgjj 在 2009-07-30 20:53 發表:

舉個實例好嚕
看看 if(cond,a,b) 與 if... then ...else 兩者在迴圈內應用
速度的比較

此段跑很慢

原碼:

MM
:C*0;
CK:=C>O;
OO:=OHH:=H;
for 
i=1 to 900000 do begin
 MM
[datacount]:=if(CK[datacount]=1,OO[datacount],HH[datacount]);
end;



此段跑很快
原碼:

MM
:C*0;
CK:=C>O;
OO:=OHH:=H;
for 
i=1 to 900000 do begin
 
if CK[datacount]=1 then begin
   MM
[datacount]:=OO[datacount];
 
end else begin
   MM
[datacount]:=HH[datacount];
 
end;
end;


由 alpha 在 2009-07-30 22:15 發表:

幫 c 大測試這段

=========== 102.61 秒 ~~ 驚呆了 ( 以上的datacount 都是 30000 根 )

C1:=C;
O1:=C;
B12:=C*0;

for w2 = 1 to 30 do begin
for w = 2 to datacount do begin

B12[w]:=if(C1[w]=1,O1[w],C1[w]);
end;
end;


// ===

把 if() 改成 MAX() 函數 , 同樣以單值傳入

B12[w] := MAX(B12[w],C1[w]);

MAX() 函數只要 1.31 秒

若說 if() 如此費時是因為不停配置記憶體

但是 Max() 函數它又不會

不知道 if() 在搞什東東

__________________
偶而是不是也感覺有些老
像個大人般的戀愛
有時心情糟
請你相信我在你身邊別忘了


由 cgjj 在 2009-07-30 23:14 發表:

引用:
最初由 alpha 發表
..............
若說 if() 如此費時是因為不停配置記憶體
但是 Max() 函數它又不會
不知道 if() 在搞什東東



if(cond,a,b) 是專為數列對數列之計算, 為目的設計的
故不適合放入 For...do begin 之中
PS:之前有詢問過核心的人員嚕

與 MAX 相當不同


全部時間均為台灣時間, 現在時間為19:36 總頁數 (2): [1] 2 »
在這個頁面顯示本主題全部的 16 個文章


Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.

簡愛洋行 製作 Copyright 2003-. All Rights Reserved.