vb 按行保存列表框选中项到txt,然后按行读取保存到数组
①方法简介:使用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关键字,否则之前的数据都会被重置。
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
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