VB.NET 关于数据类型

Roock 2009-07-06 01:16:23
如下表格所示,有三列信息("专业","班级","人员列表"),在一个文档里面,
现在想用VB.NET写个程序,把这些信息一次性读到一个变量里面去,然后后续的处理就不用每次都去读文档.
要求: "专业" , "班级" , "人员列表" 三列的信息数量都不固定.
请问一下有什么数据类型可以做到这一点?并麻烦详细说明一下,谢谢!



专业 | 班级 | 人员列表
------|----------------------
| |张某
| 201班 |王某
| |李某
| |......
|-----------------------
计算机| |张某
| 202班 |王某
| |刘某
| |......
--------------------------------
| |杨某
会计 | 301班 |刘某
| |赵某
| |......
---------------------------------
...全文
219 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Roock 2009-07-09
  • 打赏
  • 举报
回复
谢谢大家.
特别谢谢hztltgg(我想我是风)一直Follow此问题,问题已经解决.
Roock 2009-07-07
  • 打赏
  • 举报
回复
真是太感谢了, SYSSZ(老张)和hztltgg(我想我是风)的答案是我想要的.
不过有个问题想问一下:
我可以通过 specializedfield(0)(1)(2)来准确定位到每一个人员,
想问一下能不能通过specializedfield来确定到有几个"专业",对应专业下有几个"班级",对应班级有几个"人员"?
简单的说就是如何知道specializedfield()()()三个括号分别的上限是多少?不用去看前面List的情况下.
谢谢了...
hztltgg 2009-07-07
  • 打赏
  • 举报
回复

Public Class 专业
Public Name As String
Public 班级列表 As New List(Of 班级)
End Class

Public Class 班级
Public Name As String
Public 人员列表 As New List(Of 人员)
End Class

Public Class 人员
Public Name As String
End Class

Module Module1

Sub Main()

'=================================
Dim 人员J_201_1 As New 人员 With {.Name = "张某"}
Dim 人员J_201_2 As New 人员 With {.Name = "王某"}
Dim 人员J_201_3 As New 人员 With {.Name = "李某"}

Dim 人员列表J_201 As New List(Of 人员)

人员列表J_201.Add(人员J_201_1)
人员列表J_201.Add(人员J_201_2)
人员列表J_201.Add(人员J_201_3)

Dim 班级J_201 As New 班级 With {.Name = "201班", .人员列表 = 人员列表J_201}


'=================================
Dim 人员J_202_1 As New 人员 With {.Name = "张某"}
Dim 人员J_202_2 As New 人员 With {.Name = "王某"}
Dim 人员J_202_3 As New 人员 With {.Name = "刘某"}

Dim 人员列表J_202 As New List(Of 人员)

人员列表J_202.Add(人员J_202_1)
人员列表J_202.Add(人员J_202_2)
人员列表J_202.Add(人员J_202_3)

Dim 班级J_202 As New 班级 With {.Name = "202班", .人员列表 = 人员列表J_202}

'======================================
Dim 人员K_301_1 As New 人员 With {.Name = "杨某"}
Dim 人员K_301_2 As New 人员 With {.Name = "刘某"}
Dim 人员K_301_3 As New 人员 With {.Name = "赵某"}

Dim 人员列表K_301 As New List(Of 人员)

人员列表K_301.Add(人员K_301_1)
人员列表K_301.Add(人员K_301_2)
人员列表K_301.Add(人员K_301_3)

Dim 班级K_301 As New 班级 With {.Name = "301班", .人员列表 = 人员列表K_301}

'=====================================

Dim 计算机专业班级列表 As New List(Of 班级)

计算机专业班级列表.Add(班级J_201)
计算机专业班级列表.Add(班级J_202)

Dim 会计专业班级列表 As New List(Of 班级)

会计专业班级列表.Add(班级K_301)

'=============================

Dim 计算机专业 As New 专业 With {.Name = "计算机", .班级列表 = 计算机专业班级列表}

Dim 会计专业 As New 专业 With {.Name = "会计", .班级列表 = 会计专业班级列表}



End Sub

End Module


你可以在最后设一个断点,看一下计算机专业,会计专业 这两个变量的值,应该就知道怎么访问数量了,有count属性。

还有,别用中文命名这些变量吧,这儿是为了说明方便
Roock 2009-07-07
  • 打赏
  • 举报
回复
我顶.
herohlq 2009-07-07
  • 打赏
  • 举报
回复
UP
oo渣渣oo 2009-07-07
  • 打赏
  • 举报
回复
结构定义的每个变量前面写漏了"Dim",自己加上吧
oo渣渣oo 2009-07-07
  • 打赏
  • 举报
回复
定义几个结构就能轻松搞定了:


'班级人员列表定义
Public Structure ClassList
ClasName As String '班级名称
StudNum As Integer '表示人员数量
StudName() As String '人员列表
End Structure

'专业列表
Public Structure SpecList
SpecName As String '专业名称
ClasNum As Integer '表示班级数量
ClasInfo() As ClassList '班级列表
End Structure



使用的时候直接

Dim a() As SpecList
Roock 2009-07-07
  • 打赏
  • 举报
回复
hztltgg(我想我是风),你太帅了,一下子就说到了问题的关键所在,的确用了前面的方法后没有办法把名字存进去.
能不能针对我的这种情况,详细说明一下vwxyzh(为什么只能写这点字了?????)说的定义三个类的方法.
谢谢了.
shockcqyc 2009-07-07
  • 打赏
  • 举报
回复
既然市面向对象的语言,为什么不用类或者结构呢
ScottYj 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 syssz 的回复:]
VB.NET codePublicClass Form1PrivateSub Form1_Load(ByVal senderAsObject,ByVal eAs System.EventArgs)HandlesMe.LoadDim classe201()AsString= {"张三","李四","王五"}Dim classe202()AsString= {"孙大","刘七","赵乙"}Dim cl¡­
[/Quote]
hztltgg 2009-07-07
  • 打赏
  • 举报
回复
数组Length属性
集合Count属性

一般也可以通过for each循环或linq方式来遍历

specializedfield.Length
specializedfield().Length
specializedfield()().Length

computer.Count
computer(1).Count

这样,不过正解应该是vwxyzh的,需要建三个类,分别存放人员,班级和专业,我们可能都比较懒,不行写的这么麻烦,不过不独立写类,连班级名称,专业名词都没对方存
vwxyzh 2009-07-06
  • 打赏
  • 举报
回复
public class 专业
public Name As String
public 班级列表 As New List(of 班级)
end class

public class 班级
public Name As String
public 人员列表 As New List(of 人员)
end class

public class 人员
public Name As String
end class
hztltgg 2009-07-06
  • 打赏
  • 举报
回复

Dim classe201 As New List(Of String)
classe201.Add("张三")
classe201.Add("李四")
classe201.Add("王五")

Dim classe202 As New List(Of String)
classe202.Add("孙大")
classe202.Add("刘七")
classe202.Add("赵乙")

Dim classe301 As New List(Of String)
classe301.Add("李甲")
classe301.Add("杨丙")
classe301.Add("胡丁")
classe301.Add("方小三")

Dim computer As New List(Of List(Of String))
computer.Add(classe201)
computer.Add(classe202)

Dim accounting As New List(Of List(Of String))
accounting.Add(classe301)

Debug.Print(computer(1)(0))


SYSSZ 2009-07-06
  • 打赏
  • 举报
回复
Public Class Form1

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim classe201() As String = {"张三", "李四", "王五"}
Dim classe202() As String = {"孙大", "刘七", "赵乙"}
Dim classe301() As String = {"李甲", "杨丙", "胡丁", "方小三"}
Dim Computer() As Object = {classe201, classe202}
Dim accounting() As Object = {classe301}
Dim specializedfield() As Object = {Computer, accounting}
Debug.WriteLine(specializedfield(0)(1)(2).ToString)
End Sub
End Class
一只熊猫 2009-07-06
  • 打赏
  • 举报
回复
呵呵,那你把数据导入sql吧,然后统计、分析、排序、查找....想怎么整就怎么整吧。
Roock 2009-07-06
  • 打赏
  • 举报
回复
感谢 bjliuzg ,你的方法是解决了 Going1981 的固定条目的问题,但是大体思路是一样的,也是按照每个人员去定义一个Item,对后面去处理不太方便.

不知道还有没有更好的方法?
bjliuzg 2009-07-06
  • 打赏
  • 举报
回复
for i as integer = 0 to count -1
newinfo(i).专业 = ds.Tables(0).Rows(i).Item(0)
newinfo(i).班级 = ds.Tables(0).Rows(i).Item(1)
newinfo(i).人员列表 = ds.Tables(0).Rows(i).Item(2)
next

呵呵,急中生乱了,不好意思,循环体用这个
用 rows(i) 来循环遍历
Roock 2009-07-06
  • 打赏
  • 举报
回复
感谢 Going1981.
不过这样子的话,每一个人员都要定义为一个数组项,不是很理想,而且不利于我后续的处理.
比如我要知道202班有多少个人,还有去搜整个数组,然后去加条件判断.

我刚才一直在想,有没有一数据类型可以三个数组联系起来的,
比如: SPEC().CLAS().PRSN()
这样的话就很方便,我给SPEC(0)="计算机"
SPEC(1)="会计"
然后再给SPEC(0).CLAS(0)="201班"
SPEC(0).CLAS(1)="202班"

然后再给SPEC(0).CLAS(0).PRSN(0)="张某"
SPEC(0).CLAS(0).PRSN(1)="王某"
SPEC(0).CLAS(0).PRSN(2)="李某"
.........
请高手指点.
bjliuzg 2009-07-06
  • 打赏
  • 举报
回复
上面的结构体应该是 structure 不是 function 呵呵 不好意思,写错了
bjliuzg 2009-07-06
  • 打赏
  • 举报
回复
2楼的方法基本是可行的,不过你定义的是固定条数的,如果内容要是多余10条怎么办呢,要是100条数据的话这样做就有点麻烦了

定义一个结构体:
public function 人员信息
friend 专业 as string
friend 班级 as string
friend 人员列表 as string
end function

估计楼主的信息是检索出来的吧,那么可以用一个循环体实现一次读取
dim count as integer = 检索出来的信息的条数(ds.Tables(0).Rows.Count)

dim newinfo(count) as new 人员信息

for i as integer = 0 to count -1
newinfo(i).专业 = ds.Tables(0).Rows.Item(0)
newinfo(i).班级 = ds.Tables(0).Rows.Item(1)
newinfo(i).人员列表 = ds.Tables(0).Rows.Item(2)
next

当然你的sql检索顺序应该是 专业,班级,人员列表,这样就可以一次性的把数据都存放到newinfo数组中了
当你用的时候,可以访问 newinfo(n)

呵呵 我自己试过了,完全是可以的,如果有不清楚的地方,还可以问,希望以上对你有所帮助。
加载更多回复(3)
第一部分 Visual Basic.net基础 1.vb. net介绍 2.vb.net的优点 3.新建一个vb.net项目 4.编写第一个vb.net应用程序 第二部分 vb.net的语法部分 1.vb.net的Numeric数据类型 2.vb.net的Byte数据类型 3.vb.net的String数据类型 4.vb.net的Boolean数据类型 5.vb.net的Date数据类型 6.vb.net的Object数据类型 7.vb.net的用户自定义类型 8.vb.net的数组定义 9.vb.net的数组列表 10.vb.net的多维数组 11.vb.net类型转换函数 第三部分 visual basic.net的运算 程序设计时经常用到的有6种运算:算术运算(Arithmetic)、赋值运算(Assignment)、二进制运算(Bitwise)、比较运算(Comparison)、连接运算(concatenation)及逻辑运算(Logical),下面对这6种运算进行简单介绍。 1.vb.net的算术运算 2.vb.net的赋值运算符 3.vb.net的二进制运算符 4.vb.net的比较运算符 5.vb.net的连接运算符和逻辑运算符 6.vb.net运算符的优先级 (一) Visual basic.net的常量和变量 1.vb.net的常量 2.vb.net的变量 (二) Visual basic.net的流程和控制结构 1.vb.net条件分支语句 2.vb.net的循环语句 (三) vb.net的过程和函数 1.vb.net的Sub过程 2.vb.net的Funtion过程 3.在vb.net中调用过程 4.如何向过程传递参数 (四)vb.net的类和对象基础 第四部分 visual basic.net的常用控件 1.vb.net的Label控件 2.vb.net的Button控件 3.vb.net的Textbox控件 4.vb.net的MainMenu控件 5.vb.net的Checkbox控件 6.vb.net的Radiobutton控件 7.vb.net的GroupBox控件 8.vb.net的PictureBox控件 9.vb.net的ListBox控件 10.vb.net的CheckedListBox控件 11.vb.net的Combobox控件 12.vb.net的ListView控件 13.vb.net的TreeView控件 14.vb.net的ImageList控件 15.vb.net的Timer控件 16.vb.net的HScrollBar和VScrollBar控件 17.vb.net的ProgressBar控件 18.vb.net的ToolBar控件 19.vb.net的StatusBar控件 20.Vs 2005的ToolStrip控件 21.Vs 2005的StatusStrip控件 22.Vs 2005的MenuStrip控件 第六部分 vb.net的OOP结构 1.什么是oop 2.vb.net的面向对象性 3.vb.net的共享成员(Share Members) 4.类模块和标准代码模块的区别和比较 5.对象浏览器 (一) 建立和使用对象 1.vb.net对象的建立和销毁:对象的生命周期 2.设置和重设vb.net的属性 3.用方法来表现动作 4.vb.net对象变量的声明 5.对一个对象进行多种操作 6.使用New关键字 7.如何释放对对象的引用 8.如何把对象传递到一个过程 (二) 在程序运行中得到一个类的信息: 用一个字符名称调用一个属性或者方法 (三) vb.net中的类、继承与多态性 1.vb.net中给一个类添加方法 2.命名属性、方法和事件 3.vb.net的事件和事件处理 4.类的继承(Inheritance) 5.vb.net继承的规则 6.用继承建立一个继承类 7.重载Windows控件 8.什么时候使用继承 9.什么是命名空间(Namespace) 10.vb.net继承的例子 11.vb.net中用继承实现多态性 12.vb.net中用接口实现多态性 第七部分 数据库访问技术 关于SQL语言的知识,请参考: sql语言教程及Sql语言基础 1.数据库基础知识 2.vb.net数据集(Datasets)的概念 3.什么是dao 4.Dao与Jet数据库引擎 5.Dao对象模型 6.远程数据对象RDO 7.Rdo对象模型 8.odbc api是什么 9.ODBC的结构 10.使用ODBC API访问数据库 11.ado数据对象 12.ado对象模型 13.ADO.NET简介 14.使用ADO.NET的基本方法 第八部分 vb.net的多线程 1.自由线程(Free Threading) 2.关于线程的参数和返回值的问题 3.vb.net的并发性问题 第九部分 vb.net的文件和出错处理 1.vb.net的出错处理 2.vb.net的多种出错处理(Multiple Exceptions) 3.vb.net的文件对象(file object) 4.vb.net文件处理的出错处理 5.检测文件的结束(Testing for End of File) 6.文件的静态方法(Static File Methods)
vb.net基础教程 第一部分 Visual Basic.net基础 1.vb. net介绍 2.vb.net的优点 3.新建一个vb.net项目 4.编写第一个vb.net应用程序 第二部分 vb.net的语法部分 1.vb.net的Numeric数据类型 2.vb.net的Byte数据类型 3.vb.net的String数据类型 4.vb.net的Boolean数据类型 5.vb.net的Date数据类型 6.vb.net的Object数据类型 7.vb.net的用户自定义类型 8.vb.net的数组定义 9.vb.net的数组列表 10.vb.net的多维数组 11.vb.net类型转换函数 第三部分 visual basic.net的运算 程序设计时经常用到的有6种运算:算术运算(Arithmetic)、赋值运算(Assignment)、二进制运算(Bitwise)、比较运算(Comparison)、连接运算(concatenation)及逻辑运算(Logical),下面对这6种运算进行简单介绍。 1.vb.net的算术运算 2.vb.net的赋值运算符 3.vb.net的二进制运算符 4.vb.net的比较运算符 5.vb.net的连接运算符和逻辑运算符 6.vb.net运算符的优先级 (一) Visual basic.net的常量和变量 1.vb.net的常量 2.vb.net的变量 (二) Visual basic.net的流程和控制结构 1.vb.net条件分支语句 2.vb.net的循环语句 (三) vb.net的过程和函数 1.vb.net的Sub过程 2.vb.net的Funtion过程 3.在vb.net中调用过程 4.如何向过程传递参数 (四)vb.net的类和对象基础 第四部分 visual basic.net的常用控件 1.vb.net的Label控件 2.vb.net的Button控件 3.vb.net的Textbox控件 4.vb.net的MainMenu控件 5.vb.net的Checkbox控件 6.vb.net的Radiobutton控件 7.vb.net的GroupBox控件 8.vb.net的PictureBox控件 9.vb.net的ListBox控件 10.vb.net的CheckedListBox控件 11.vb.net的Combobox控件 12.vb.net的ListView控件 13.vb.net的TreeView控件 14.vb.net的ImageList控件 15.vb.net的Timer控件 16.vb.net的HScrollBar和VScrollBar控件 17.vb.net的ProgressBar控件 18.vb.net的ToolBar控件 19.vb.net的StatusBar控件 20.Vs 2005的ToolStrip控件 21.Vs 2005的StatusStrip控件 22.Vs 2005的MenuStrip控件 第六部分 vb.net的OOP结构 1.什么是oop 2.vb.net的面向对象性 3.vb.net的共享成员(Share Members) 4.类模块和标准代码模块的区别和比较 5.对象浏览器 (一) 建立和使用对象 1.vb.net对象的建立和销毁:对象的生命周期 2.设置和重设vb.net的属性 3.用方法来表现动作 4.vb.net对象变量的声明 5.对一个对象进行多种操作 6.使用New关键字 7.如何释放对对象的引用 8.如何把对象传递到一个过程 (二) 在程序运行中得到一个类的信息: 用一个字符名称调用一个属性或者方法 (三) vb.net中的类、继承与多态性 1.vb.net中给一个类添加方法 2.命名属性、方法和事件 3.vb.net的事件和事件处理 4.类的继承(Inheritance) 5.vb.net继承的规则 6.用继承建立一个继承类 7.重载Windows控件 8.什么时候使用继承 9.什么是命名空间(Namespace) 10.vb.net继承的例子 11.vb.net中用继承实现多态性 12.vb.net中用接口实现多态性 第七部分 数据库访问技术 关于SQL语言的知识,请参考: sql语言教程及Sql语言基础 1.数据库基础知识 2.vb.net数据集(Datasets)的概念 3.什么是dao 4.Dao与Jet数据库引擎 5.Dao对象模型 6.远程数据对象RDO 7.Rdo对象模型 8.odbc api是什么 9.ODBC的结构 10.使用ODBC API访问数据库 11.ado数据对象 12.ado对象模型 13.ADO.NET简介 14.使用ADO.NET的基本方法 第八部分 vb.net的多线程 1.自由线程(Free Threading) 2.关于线程的参数和返回值的问题 3.vb.net的并发性问题 第九部分 vb.net的文件和出错处理 1.vb.net的出错处理 2.vb.net的多种出错处理(Multiple Exceptions) 3.vb.net的文件对象(file object) 4.vb.net文件处理的出错处理 5.检测文件的结束(Testing for End of File) 6.文件的静态方法(Static File Methods)

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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