[VB基础问题求教]如何定义和使用一个大小不确定的结构体数组呢?

rivershan 2005-10-12 10:37:23
还有一系列问题撒
...全文
460 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishmans 2005-10-12
  • 打赏
  • 举报
回复
唉,可能我真的老了,看楼主的题我都看不出问题关键在哪??
samwzhang 2005-10-12
  • 打赏
  • 举报
回复
算是弥补了一点点vb没有指针的缺陷。
谁说VB没有指针?
看看:StrPtr、VarPtr、ObjPtr这些函数
还有指针用到的CopyMemmory等函数。
VB还是有指针的... ...
脆皮大雪糕 2005-10-12
  • 打赏
  • 举报
回复
szParaText = replace(szParaText,vbcrlf,"")
脆皮大雪糕 2005-10-12
  • 打赏
  • 举报
回复
replace(szParaText,vbcrlf,"")
rivershan 2005-10-12
  • 打赏
  • 举报
回复
szParaText : "2.1.4 80386保护机制

"

字符串szParaText最后的换行怎么去掉?
脆皮大雪糕 2005-10-12
  • 打赏
  • 举报
回复
不管黑猫白猫,能解决问题就是好猫。最简易的方法解决问题就行了,为什么非要钻牛角尖
Summer006 2005-10-12
  • 打赏
  • 举报
回复
哎呀哟都是高手。。汗
这个我以前常用的方法是,定义足够多的,比如 dim your(0 to 10000)as yourtype
再用个dim yourpoint as long 表示已使用到哪个位置。不过这样太龌龊了。

winehero(编程人生)的方法应该算是大伙都接受的方法把。 算是弥补了一点点vb没有指针的缺陷。
winehero 2005-10-12
  • 打赏
  • 举报
回复
你们这些集合人啦。。。
看看本贴主题,都走题了吧?集合人每人加分。。。-300分。
呵呵
脆皮大雪糕 2005-10-12
  • 打赏
  • 举报
回复
来来来,我也给一个用集合的解决方案

建立一个新的标准exe工程,然后再添加一个dll工程,dll工程的class1的instancing设置为6,这样比较省事

class1的代码:

Option Explicit
Type OutlineInfo
szOutLine As String
lStart As Long
lEnd As Long
nLevel As Integer
End Type

form1放两个按钮粘贴下面代码

Option Explicit

Dim colOutlineInfo As New Collection '模块级自定义变量集合

Private Sub Command1_Click()
Dim test As OutlineInfo
Dim i As Integer
For i = 1 To 1000 '添加1000个对象到集合中
test.szOutLine = "test" & i
test.lStart = Rnd() * 10000
test.lEnd = Rnd() * 10000
test.nLevel = Rnd() * 10
colOutlineInfo.Add test, test.szOutLine
Next
End Sub

Private Sub Command2_Click()
Dim test As OutlineInfo
'输出集合中对相个数
Debug.Print colOutlineInfo.Count
'用index数值的方式取其中一个元素
test = colOutlineInfo(200)
Debug.Print test.szOutLine
Debug.Print test.lStart
Debug.Print test.lEnd
Debug.Print test.nLevel

'用key值方式取其中一个元素
test = colOutlineInfo("test500")
Debug.Print test.szOutLine
Debug.Print test.lStart
Debug.Print test.lEnd
Debug.Print test.nLevel

End Sub
samwzhang 2005-10-12
  • 打赏
  • 举报
回复
winehero(编程人生) 的方法就可以了,但是这样做不利于在程序间传递。
还是用集合吧,又方便使用又方便传递。
例:
类模块:OutlineInfo
Option Explicit
public szOutLine As String
public lStart As Long
public lEnd As Long
public nLevel As Integer

程序内:
Dim arrOutlineInfo As New Collection,i as long,Inst as Object
i=0
do
'分析
'满足分析条件则:
i=i+1
set Inst=New OutlineInfo'同一工程内,不同工程用:set Inst=createobject("工程名. OutlineInfo")
with Inst
.szOutLine =...
...
end With
arrOutlineInfo.Add Inst,CStr(i)
set Inst=nothing
'分析结束,跳出
loop

arrOutlineInfo就是结果了。
yinweihong 2005-10-12
  • 打赏
  • 举报
回复
winehero(编程人生) 的方法可以试试

大概就是这样子

Dim arrOutlineInfo() As OutlineInfo后面

dim ArrCount as integer
arrcount=int(rnd()*1000)
while arrcount
redim arrOutlineInfo(arrcount)
loop
flyingZFX 2005-10-12
  • 打赏
  • 举报
回复
Private Sub Form_Load()
Dim a() As String
Dim i As Long

ReDim a(1)

a(0) = "a"

a(1) = "b"

ReDim Preserve a(5)

a(2) = "c"

a(3) = "d"

a(4) = "E"

For i = 0 To UBound(a) - 1
Debug.Print a(i)
Next


End Sub
winehero 2005-10-12
  • 打赏
  • 举报
回复
初始化数组元素个数(i=0)
开始分析
...

分析到一个
i=i+1
ReDim Preserve arrOutlineInfo(0 to i-1 ) As OutlineInfo
arrOutlineInfo(i-1)=你刚分析出的OutlineInfo
分析下一个
...
结束分析
脆皮大雪糕 2005-10-12
  • 打赏
  • 举报
回复
能不能用集合呢?
winehero 2005-10-12
  • 打赏
  • 举报
回复
用Redim Preserve不行吗?
rivershan 2005-10-12
  • 打赏
  • 举报
回复
' 定义结构
Private Type OutlineInfo
szOutLine As String
lStart As Long
lEnd As Long
nLevel As Integer
End Type

' 定义数组
Dim arrOutlineInfo() As OutlineInfo

这个arrOutlineInfo的大小不确定,我分析出来一个满足条件的OutlineInfo就要填充一个,我也不确定我会分析多少出来。

请问各位大虾如何实现?
winehero 2005-10-12
  • 打赏
  • 举报
回复
抢个沙发。。。
脆皮大雪糕 2005-10-12
  • 打赏
  • 举报
回复
//对效率要求很高 是指什么?处理速度?
//指针处理比redim速度快多少?我用与vba中

比如有一个10000个元素的字节数组a(0 to 9999) as byte,作为数据源。现在每次从这个数组中取出100个元素到b(0 to 99) as byte进行处理,循环100次以后完成全部处理。
这时候每次取100个元素的操作怎么做的呢?一般的操作是象下面这样
dim i as integer,j as integer
for i = 0 to 99
for j = 0 to 99
b(j) = a(i * 100 + j)
.........对b()的操作
nextj
next i

如果用指针的话
dim i as integer
dim lngPtr as long
dim lngAryPtr
lngptr = varptr(a(0))
for i = 0 to 99
copymemory b(0),lngptr + i *100,100
.........对b()的操作
next

上面的代码没有实际运行测试过,大概这个意思吧。后者的效率比前者高许多。我遇到比较多的这种情况是在处理图形dib数据取出来进行一大堆变换操作的时候。用指针的速度同提高非常多。redim就没必要用指针来弄了。
rivershan 2005-10-12
  • 打赏
  • 举报
回复
对效率要求很高 是指什么?处理速度?
指针处理比redim速度快多少?我用与vba中
zou19820704 2005-10-12
  • 打赏
  • 举报
回复
rivershan (过分的比较讨论某种语言,就像站在两个槽子中间不知哪)
拿分给我吧,呵呵
看看我的代码符合你的要求不?




Option Explicit
Private Type OutlineInfo
szOutLine As String
lStart As Long
lEnd As Long
nLevel As Integer
End Type


Dim arrOutlineInfo() As OutlineInfo
Dim i As Integer
Private Sub AddData()
If True Then
i = i + 1
ReDim Preserve arrOutlineInfo(i) As OutlineInfo
arrOutlineInfo(i).szOutLine = "KKKK"
.
.
.
.

End If

End sub

Private Sub Form_Load()
i = -1
End Sub


其中的ture就是你满足条件的返回值!!


加载更多回复(6)

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧