vb 按行保存列表框选中项到txt,然后按行读取保存到数组

 我来答
牧云沐雨
2016-07-27 · TA获得超过1064个赞
知道小有建树答主
回答量:116
采纳率:81%
帮助的人:87.8万
展开全部

①方法简介:使用Visual Basic按行保存列表框选中项到txt,然后按行读取保存到数组。

设置listbox的style属性为1,使他显示复选框。利用listbox的selected属性获得选中项的数据。并将其按顺序保存到变量Str中,在C盘创建txt文件并保存。然后使用line input语句按行读取字符串,并保存在Arr变量里。

②所用工具:Visual Basic 6.0

③步骤:

新建一个标准EVE工程

创建一个Textbox和一个CommandButton,用于在Listbox中输入数据。设置Textbox的Text属性为空字符串“”,名称为Text1,设置CommandButton的Caption属性为“录入数据”,名称为Command1;(*注1)

创建一个Listbox,设置其Style属性为1-Checkbox,名称为List1;

创建两个CommandButton,名称分别为Command2、Command3,Caption属性分别为“保存到txt”,“读取到数组”;

【注1:在实际代码中应按照情况录入数据,此处录入list的方式仅供参考】


代码部分:

先输入“录入数据”的代码:

Private Sub Command1_Click()
List1.AddItem Text1.Text    '在List1中添加一项,内容为Text1中的字符串
Text1.Text = ""             '清空Text1中的数据
Text1.SetFocus              '并设为焦点,方便用户输入
End Sub


然后输入“保存到txt”的代码:

Private Sub Command2_Click()
Dim Str As String
For i = 0 To List1.ListCount - 1
'使用For循环找出所有选中项,ListCount属性表示List中数据的项数但是List的Index是从0开始的,所以要减一
    If List1.Selected(i) Then                   '如果项目被选中,则
        Str = Str & List1.List(i) & vbCrLf      '换行保存在Str中
    End If
Next i
Str = Left(Str, Len(Str) - 2)                   '去除多余的换行符(由于使用vbcrlf,换行符占用2个字符,所以从左截取长度-2的数据)
Open "C:\VBList.txt" For Output As #1   '在C盘创建并开始编辑VBList.txt
    Print #1, Str                       '写入
Close #1
End Sub


最后输入“读取到数组”的部分:

Private Sub Command3_Click()
Dim InputStr As String
Dim n As Long: n = 0
If Dir("C:\VBList.txt") <> "" Then          '确定已有VBList.txt文件,防止Open语句出错
    Open "C:\VBList.txt" For Input As #1    '打开并准备读取C盘下的VBList.txt文件
    Do While Not EOF(1)                     '没有读取到文件尾时才会循环,防止input语句发生错误
        n = n + 1
        Line Input #1, InputStr             '按行读取数据到InputStr中
        ReDim Preserve Arr(1 To n)          '重新定义数组Arr下标范围为1到n
        Arr(n) = InputStr                   '读取到数组
    Loop
End If
End Sub


④注意事项:

1、通过Listbox的list属性可以得知每一项的内容,但是需要注意的是list(Index)中的Index是从0开始的,而获得Listbox总项数的Listcount属性确是从1开始的,如果两者之间有联系,一定要-1

2、在使用open语句的input方法前一定要判断文件是否存在,否则就会出错,同样使用追加输入方法(Append)也需要判断

3、按行读取使用Do...Loop语句时,应当使用While判断而不是Until判断,因为While条件不满足的话,循环里面的语句一句都不会执行,而使用Until则至少执行一次。如果文件是空文件的话,使用Until会导致Input语句出错(指针超过文件尾)

4、保存到数组中时,可以把数组定义的大一点,但是建议先定义空数组然后使用redim,这样不会浪费存储空间。注意如果数组中已经有数据了,一定要加上Preserve关键字,否则之前的数据都会被重置。

灰色52056
2016-06-28 · TA获得超过514个赞
知道小有建树答主
回答量:494
采纳率:100%
帮助的人:356万
展开全部
for j = 0 to (...):
Open "D:\test.txt" For Append As #1 '逐行加入到txt
Print #1, arr(j)
Close #1
next j
arr(j)为选中的列表框的数组,Append 为逐行加入
更多追问追答
追问
我希望能在另一个窗口按行读取,保存到数组
追答
TextBox1.Text = arr(j) & TextBox1.Text
将数组arr(j)输出到窗口TextBox1.Text
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
任人笑我太疯癫我依行我道
2016-07-10 · TA获得超过1013个赞
知道小有建树答主
回答量:593
采纳率:47%
帮助的人:49.3万
展开全部
Public Function StrLoad(paths As String) As String
If paths = "" Then Exit Function
Open paths For Input As #1
Dim Lines As String
Dim NextLine As String
Do While Not EOF(1)
On Error Resume Next
Line Input #1, NextLine
Lines = Lines & NextLine & Chr(13) & Chr(10)
Loop
Close #1
StrLoad = Lines
End Function

然后这是代码:
Dim x() as string
Dim i as integer.b as string
If paths = "" Then Exit Function
Open list1.list(list1.listindex)) For Input As #1
Dim NextLine As String
Do While Not EOF(1)
On Error Resume Next
Line Input #1, NextLine
b = b & NextLine & Chr(13) & Chr(10)
Loop
Close #1
for i = 0 to ubound(split(b,vbcrlf))
x(i)=split(b,vbcrlf)(i)
next
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式