 |
KV1566
中級會員
註冊日期: Jun 2009
來 自:
文章數量: 95 |
[問題]奇狐支援的VBS是否有字數限制?
我在寫指標公式時用到了VBS,因為程式內容很長,長到了400多條程式碼,每條程式碼還都有部份是用冒號串連起來的,
我寫一小段就會停下來離開編輯檢查結果,後來,寫到相當大數量的程式碼後,突然發生錯誤訊息!
我以為程式碼有誤,檢查了半天卻沒發現問題!因為程式碼中有加入註解,索性將一些註解的內容簡化以減少字數,結果,竟然程式又正常可以執行了!
之後我繼續增加VBS程式碼,很快又出現問題!我再將程式碼中可以精簡的部份做小幅度精簡,結果就又可以執行了!
感覺上,好像是VBS達到一定的字數(比較可能)或指令數(比較不可能,因為我刪減註解也可以達到目的)後,便會出現錯誤訊息!
請問,
1、奇狐是否有VBS程式碼字數的限制?
2、若是有,限制是多少字?
3、而若是真有字數限制,卻又非得增加VBS程式碼時,要如何解決?
謝謝!
|
|
向版主報告此篇 |  |
|
2009-07-17 12:59 |
|
|
|  |
 |
KV1566
中級會員
註冊日期: Jun 2009
來 自:
文章數量: 95 |
回覆: 回覆: [問題]奇狐支援的VBS是否有字數限制?
引用: 最初由 cgjj 發表
目前版本奇狐單一公式最大能寫到 128KB
大多數的應用應該已經非常足夠了
其實奇狐內建的語法, 就可以處理大多數的程序
且速度大都比用 VBS 處理來的快
VBS是否有限制, 這要問問技術核心人員
這幾天聯絡上後, 才能答覆您
謝謝回覆!
我是在寫高低折線圖,用奇狐內建語法,我想了好久都沒能順利寫出!
奇狐的DRAWLINE是從一個合乎條件的點畫到另一個合乎條件的點,而該另一個合乎條件的點一旦被使用,就無法在同一條指令中再從該根k線的另一個高或低點位置繼續與下一個高低點做連線,所以必須用其他變通的方式寫!
我用程式邏輯極度壓縮減少程式碼數量,最後終於還是完成了!用VBS完成了,運算顯示速度上很好,選擇指標後立刻就會正常出現高低折線圖,不會因為使用VBS而延遲!只是,字數限制上,也讓我無法再對其做額外的處理了!
不過,還好終究是完成了!額外需要做的處理應該就可以用奇狐內建語法來處理!但是,若有能夠解決VBS字數限制的方法,那當然更好了!
這問題已經暫時不急!靜待您的答覆,謝謝!
|
|
向版主報告此篇 |  |
|
2009-07-17 14:57 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18091 |
但是可以用 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;
cgjj 附帶上了此圖片:
|
|
向版主報告此篇 |  |
|
2009-07-17 19:38 |
|
|
|  |
 |
KV1566
中級會員
註冊日期: Jun 2009
來 自:
文章數量: 95 |
引用: 最初由 cgjj 發表
[B]但是可以用 DRAWSL 來處理, 範例如下:
嗯,再次感謝!我找時間再來試試這種寫法,謝謝!
|
|
向版主報告此篇 |  |
|
2009-07-17 21:28 |
|
|
|  |
 |
KV1566
中級會員
註冊日期: Jun 2009
來 自:
文章數量: 95 |
引用: 最初由 cgjj 發表
已得到答覆了
並非是限制造成的
是系統的 Bug , 新版會修正此問題
謝謝您!
謝謝您繼續關懷回覆此問題!等待更版的好消息!
從那天之後,我有試著將之改為奇狐系統內建的For...do begin及If...then begin來處理,
所有的程式邏輯通通不變,只是由VBScript修過來而已,
結果發現,用VBScript寫出來的執行速度,竟然還是比內建方式寫出來的快!
看來,有些時候還是得用VBScript來處理會比較好!
期待更版中。。。
|
|
向版主報告此篇 |  |
|
2009-07-30 14:59 |
|
|
|  |
 |
alpha
資深會員
註冊日期: Oct 2006
來 自:
文章數量: 225 |
測試過了慢也不會慢多少
快也不會快多少
======== 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
%>
__________________
偶而是不是也感覺有些老
像個大人般的戀愛
有時心情糟
請你相信我在你身邊別忘了
|
最後由 alpha 在 2009-07-30 18:08 編輯 |
向版主報告此篇 |  |
|
2009-07-30 18:02 |
|
|
|  |
 |
alpha
資深會員
註冊日期: Oct 2006
來 自:
文章數量: 225 |
幫 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() 在搞什東東
__________________
偶而是不是也感覺有些老
像個大人般的戀愛
有時心情糟
請你相信我在你身邊別忘了
|
最後由 alpha 在 2009-07-30 22:22 編輯 |
向版主報告此篇 |  |
|
2009-07-30 22:15 |
|
|
|  |
本站所有內容未經作者授權禁止轉貼節錄, 發表言論僅供參考勿作為投資決策依據。瀏覽本站請使用 IE 5.5 以上版本, 最佳瀏覽解析度 1024 x 768 全彩。
|
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved. 聯絡我們
|