![]() |
在這個頁面顯示本主題全部的 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)
[問題]奇狐支援的VBS是否有字數限制?
我在寫指標公式時用到了VBS,因為程式內容很長,長到了400多條程式碼,每條程式碼還都有部份是用冒號串連起來的,
我寫一小段就會停下來離開編輯檢查結果,後來,寫到相當大數量的程式碼後,突然發生錯誤訊息!
我以為程式碼有誤,檢查了半天卻沒發現問題!因為程式碼中有加入註解,索性將一些註解的內容簡化以減少字數,結果,竟然程式又正常可以執行了!
之後我繼續增加VBS程式碼,很快又出現問題!我再將程式碼中可以精簡的部份做小幅度精簡,結果就又可以執行了!
感覺上,好像是VBS達到一定的字數(比較可能)或指令數(比較不可能,因為我刪減註解也可以達到目的)後,便會出現錯誤訊息!
請問,
1、奇狐是否有VBS程式碼字數的限制?
2、若是有,限制是多少字?
3、而若是真有字數限制,卻又非得增加VBS程式碼時,要如何解決?
謝謝!
回覆: [問題]奇狐支援的VBS是否有字數限制?
引用:
最初由 KV1566 發表
我在寫指標公式時用到了VBS,因為程式內容很長,長到了400多條程式碼,每條程式碼還都有部份是用冒號串連起來的,
我寫一小段就會停下來離開編輯檢查結果,後來,寫到相當大數量的程式碼後,突然發生錯誤訊息!
我以為程式碼有誤,檢查了半天卻沒發現問題!因為程式碼中有加入註解,索性將一些註解的內容簡化以減少字數,結果,竟然程式又正常可以執行了!
之後我繼續增加VBS程式碼,很快又出現問題!我再將程式碼中可以精簡的部份做小幅度精簡,結果就又可以執行了!
感覺上,好像是VBS達到一定的字數(比較可能)或指令數(比較不可能,因為我刪減註解也可以達到目的)後,便會出現錯誤訊息!
請問,
1、奇狐是否有VBS程式碼字數的限制?
2、若是有,限制是多少字?
3、而若是真有字數限制,卻又非得增加VBS程式碼時,要如何解決?
謝謝!
回覆: 回覆: [問題]奇狐支援的VBS是否有字數限制?
引用:
最初由 cgjj 發表
目前版本奇狐單一公式最大能寫到 128KB
大多數的應用應該已經非常足夠了
其實奇狐內建的語法, 就可以處理大多數的程序
且速度大都比用 VBS 處理來的快
VBS是否有限制, 這要問問技術核心人員
這幾天聯絡上後, 才能答覆您
回覆: 回覆: 回覆: [問題]奇狐支援的VBS是否有字數限制?
引用:
最初由 KV1566 發表
謝謝回覆!
我是在寫高低折線圖,用奇狐內建語法,我想了好久都沒能順利寫出!
奇狐的DRAWLINE是從一個合乎條件的點畫到另一個合乎條件的點,而該另一個合乎條件的點一旦被使用,就無法在同一條指令中再從該根k線的另一個高或低點位置繼續與下一個高低點做連線,所以必須用其他變通的方式寫!
我用程式邏輯極度壓縮減少程式碼數量,最後終於還是完成了!用VBS完成了,運算顯示速度上很好,選擇指標後立刻就會正常出現高低折線圖,不會因為使用VBS而延遲!只是,字數限制上,也讓我無法再對其做額外的處理了!
不過,還好終究是完成了!額外需要做的處理應該就可以用奇狐內建語法來處理!但是,若有能夠解決VBS字數限制的方法,那當然更好了!
這問題已經暫時不急!靜待您的答覆,謝謝!
回覆: 回覆: 回覆: 回覆: [問題]奇狐支援的VBS是否有字數限制?
引用:
最初由 cgjj 發表
奇狐有畫折線的函數唷, 就是 POLYLINE
另外 DRAWSL 亦可畫線
試試吧![]()
回覆: 回覆: 回覆: 回覆: 回覆: [問題]奇狐支援的VBS是否有字數限制?
引用:
最初由 KV1566 發表
底下這張圖是我用VBS搭配計算畫出來的高低折線圖,其中,必須對「母子」線及「子母」線組合做處理!
請問,POLYLINE可以畫出來嗎?
POLYLINE兩個參數,一個是符合的條件,一個是價位數列
如果我將處理完的轉折價位放入數列中,當遇到子母、母子,且有可能要在其該根K線的高點及低點同時往左往右畫出與其他高低點連結的線條時,如何用POLYLINE辦到?!
這個函數比較不熟,尚請指導!謝謝!
但是可以用 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 發表
[B]但是可以用 DRAWSL 來處理, 範例如下:
已得到答覆了
並非是限制造成的
是系統的 Bug , 新版會修正此問題
謝謝您!
引用:
最初由 cgjj 發表
已得到答覆了
並非是限制造成的
是系統的 Bug , 新版會修正此問題
謝謝您!
引用:
最初由 KV1566 發表
謝謝您繼續關懷回覆此問題!等待更版的好消息!
從那天之後,我有試著將之改為奇狐系統內建的For...do begin及If...then begin來處理,
所有的程式邏輯通通不變,只是由VBScript修過來而已,
結果發現,用VBScript寫出來的執行速度,竟然還是比內建方式寫出來的快!
看來,有些時候還是得用VBScript來處理會比較好!
期待更版中。。。
測試過了慢也不會慢多少
快也不會快多少
======== 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
%>
__________________
偶而是不是也感覺有些老
像個大人般的戀愛
有時心情糟
請你相信我在你身邊別忘了
舉個實例好嚕
看看 if(cond,a,b) 與 if... then ...else 兩者在迴圈內應用
速度的比較
此段跑很慢
原碼:
MM:C*0;
CK:=C>O;
OO:=O; HH:=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:=O; HH:=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;
幫 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 發表
..............
若說 if() 如此費時是因為不停配置記憶體
但是 Max() 函數它又不會
不知道 if() 在搞什東東
感謝各位前輩的測試!
我仔細檢查過我VBS裡頭的程式碼,只有動用到For...Next及If...Else If...Then,且都是對單一元素做處理!
將之轉寫為奇狐內建寫法的For...do begin...end;及If...then begin...end else if...end;也是一樣,在迴圈內都只是對單一元素做判斷處理而已。當然,也會用到And Or Not等,但是沒有用到如If(...,...,..)這樣耗時的函式!
其實,兩者間的速度也沒差多少,但,確實有差!
VBS寫出者,好比我連按滑鼠左鍵一樣,連按兩下可點選出該指標,相當於連按至第三下的時間,線圖顯示就完全出來了!
而改用內建方式寫出者,要到滑鼠連按至第四下的時間才跑出來!
只差一個連按滑鼠的時間而已,但卻是VBS所寫者較快!我也不知道為什麼!原本我以為應該是內建的快才對的,結果不是!
而我寫入的程式碼多達400多行,其中非常多的If...End Else If...End Else If...End,且有多層判斷式存在!不知是不是因為如此而造成本來應該是內建寫法較快者反而變慢了?!
不過,還好,真的沒關係,畢竟只差一下連按滑鼠的時間而已,對實際操作並不會有什麼困擾!
VBS目前無法容納太多字數,會造成程式無法繼續擴展,而內建雖然不知為什麼有極些微的速度差距,但至少可以順利擴展程式碼,這樣就夠了,等以後奇狐改版解決VBS問題後,應該就可以任意選擇寫法使用了吧!
全部時間均為台灣時間, 現在時間為00:33 | 在這個頁面顯示本主題全部的 16 個文章 |
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved.