作者yauhh (姚呵呵)
看板Visual_Basic
标题Re: [QB] 想请问关於动态阵列~~及Split这各函式...
时间Thu Jul 17 01:33:13 2008
※ 引述《m9556 (紫色天平Boy)》之铭言:
: 最近因为逼不得已,由VB6 及 VBA 回到古董的Quick Basic,
: 少了很多函式可以用,尤其是Split这一个,
: 想要写一个Split function来用,但是有些地方真的不太懂,
: 1. 当宣告Function时,function里有阵列,我要怎要回传到主程式,
: 主程式里,应该要怎样承接这个阵列?不要使用全域变数的阵列...
: 因为VB6里,可以用一个空阵列去收Split回传的字串阵列,
: 但是现在要写一个 function 却不知道该怎样下手。
: 2. 动态阵列=> 有可能一开始不定义大小,而在程式中直接给值,
: 而自动新增吗???
: 麻烦各位高手帮一下罗~~~~~
: 可以给我VB6的做法,我自己在想办法~~~
: 谢谢啦~~~~
如果你用的是 Quick Basic 4.5, 这些功能应该可以做.
动态阵列与函数传值在 Help > Index 都有谈到.
动态阵列,宣告时用变数当索引值即是; 如果用常数就是静态阵列.
而函数传回阵列的想法, C/C++ 都还没能这样做, QB应该也不行吧.
不过,函数的参数列都是传参考,只要把把阵列丢进 function 或 sub,
阵列内容就会被function或sub改掉.
DECLARE FUNCTION F (b())
n = 3
DIM a(n), c(n) 'two dynamic arrays
CLS
FOR i = 0 TO 3
a(i) = i
PRINT a(i)
NEXT i
PRINT
REDIM a(5)
FOR i = 0 TO 5
a(i) = 0
PRINT a(i),
NEXT i
PRINT
c = f(a()) 'function call
FOR i = 0 TO 4 'print array which has been an argument in
PRINT a(i), 'function call
NEXT i
PRINT
FOR i = 0 TO 3 'try to print returned array
PRINT c(i)
NEXT i
PRINT
FUNCTION f (b())
REDIM b(4)
FOR i = 0 TO 4
b(i) = 10 + i
NEXT i
f = b 'try to return an arry; but b may be not
END FUNCTION
你的问题:
第一想要传阵列进函数再取出,要先定义函数 FUNCTION f(x()),
其中参数要是阵列样式;呼叫时要给阵列参数 f(a())
不过在此,我写成如下的程式码,执行都有问题; 都不知道为什麽:
f(a()) 'message: expression expected
CALL f(a()) 'message: duplicate definition
请参考 Help > Index >> <Function Statement> >> <Detail>
第二,使用动态阵列,只要用变数宣告阵列,再使用REDIM即可:
DIM a(n): REDIM a(5)
请参考 Help > Index >> <DIM Statement> >> <Details> 的
"Static and Dynamic Arrays" 一段.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.160.212.86
1F:推 m9556:看来~~真的只能用全域变数来弄~ 07/17 05:26
2F:→ m9556:感谢Y大~你花时间try~玩QB~感觉跟VB不会差很多 07/17 05:28
3F:→ yauhh:没什麽,只是做一次怀旧之旅 07/17 05:47
4F:→ MOONRAKER:其实还是进步不少 只是都躲在老扣扣的syntax底下而已… 07/17 18:30
5F:→ yauhh:突然想到VB的 REDIM Preserv a(n) 这个语法,在 QB 07/17 19:06
6F:→ yauhh:似乎没有;QB45的说明档只提到REDIM是配置另一段空间.. 07/17 19:06
7F:→ yauhh:所以若要preserve的功能,要自己做 07/17 19:08
8F:→ m9556:呵呵呵~今天用全域的共用变数写一写~不过也只有完成10% 07/17 20:18
9F:→ m9556:还有一堆浮点数要处理~~~~~真是~~~想到我还有8051要写~ 07/17 20:19