VB如何读取txt文件某列数据

RIVERBASIN 2007-12-15 09:02:14
如data.txt中的文件为:
1 2 3 4
2 3 4 5
12 6 7 6

我想要读取第二列的数据,怎么操作?
...全文
1022 点赞 收藏 20
写回复
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
muyu1234 2007-12-29
支持老马
回复
cike_1111 2007-12-29
老马的 做成函数 思路不错!
回复
cike_1111 2007-12-29
这个!! 我看一般都要看数据的具体存储情况来定!

因为有时处理的数据 并不是自己导出的!

而是有现成的数据要处理!

所以应具体看数据的排列形式而想出对应的应付思路!

(12楼 is me )
回复
LWMWORK 2007-12-29
mark
回复
MikeChen007 2007-12-29
mark
回复
weitme 2007-12-28
用二维数组或许可以
回复
感觉把vbTab这个参数也做到函数参数里面去让用户动态指定,应该能更有通用性......
回复
我来总结一下,做成函数:

Private Function GetText4TXT(ByVal TxtName As String, ByVal TxtField As Long) As String()
Dim tmpStrBuff As String, tmpStrBuffArr1() As String, tmpStrBuffArr2() As String, tmpOutBuffArr() As String
Dim I As Long, J As Long

Open TxtName For Binary As #1 '先一次性读入文件
tmpStrBuff = String(LOF(1), Chr(0))
Get 1, , tmpStrBuff
Close #1

TxtField = TxtField - 1
tmpStrBuffArr1 = Split(tmpStrBuff, vbCrLf) '按行分割
J = 0
ReDim tmpOutBuffArr(J) '初始化输出数组,0维不使用.

For I = 0 To UBound(tmpStrBuffArr1) '从每行开始循环,把所需要的列复制到输出数组内
tmpStrBuffArr2 = Split(tmpStrBuffArr1(I), vbTab) '目标行是用什么分开每列的这里就用什么
If UBound(tmpStrBuffArr2) > 2 And UBound(tmpStrBuffArr2) >= TxtField Then
J = J + 1 '加一维,把结果复制过去.
ReDim Preserve tmpOutBuffArr(J)
tmpOutBuffArr(J) = Trim(tmpStrBuffArr2(TxtField))
Debug.Print tmpOutBuffArr(J)
End If
Next I
GetText4TXT = tmpOutBuffArr
End Function


调用很简单:

Dim I() As String

I = GetText4TXT("文件名", [列数])

I()里就是每列的内容(从1维开始)
回复 1
of123 2007-12-28
实际上,你有两种选择:
1, 用作随机读取文件。你的每一列必须固定宽度:

文件:
1 2 3 4
2 3 4 5
12 6 7 6

Type Record
Field1 as String*6
Field2 as String*10
Field2 as String*8
Field2 as String*12
End Type

Dim r As Record, i As Integer
Open "myfile" For Random As #1 Len = Len(r)
For i = 1 To Int(LOF(1) / Len(r))
Get #1, i, r
Debug.Print Val(r.Field2)
Next i
Close #1

2, 用作顺序读取文件。最好是每行一条记录,各列之间以制表符 Tab 分隔。当然以空格分隔也可以,但空格数不定时麻烦一些。

Dim tmp As String, fields() As String
Open "myfile" For Input As #1
Do Until EOF(1)
Line Input #1, tmp
Do While Instr(tmp, Space(2))
tmp = Replace(tmp, Space(2), Space(1))
Loop
fileds = Split(tmp, Space(1))
Debug.Print fields(1)
Loop
Close #1
回复
cike_1111 2007-12-28
若列之间间隔的是 空格 那就好办了

首先 先把他们分成 N 行
其次 把每行分成每段 以空格区分开来 存储在变量中 取第2个项

还是直接给代码吧!

材料:
1个 text1
1个 command1

设置:text1= 多行显示

代码部分:

Private Sub Command1_Click()
Dim a As Variant
Dim b As Variant
a = Split(Text1, vbCrLf) '分割text1内的数据成行
For i = 0 To UBound(a) '循环每一行
If Len(a(i)) > 3 Then '这个判断用来避免把空行提取算进来 若提取到空行则提取不到数组b(1)了
c = (a(i))
For j = 0 To Len(a(i)) '这个循环把多余的空格全部变成一个空格
c = Replace(c, " ", " ")
Next j
b = Split(c, " ") '以一个空格划分后把分段放到数组b中
s = s & b(1) & vbCrLf '字符=字符连接b的第2项目连接换行
End If
Next i
Text1 = s '重新输出到text
End Sub
Private Sub Form_Load()
a = "1 2 3 4" & vbCrLf
a = a & "1 3 5 8" & vbCrLf
a = a & "123 325 587 18" & vbCrLf
a = a & "81 355 55 a8" & vbCrLf
a = a & "1c 2c3 585 c8" & vbCrLf
Text1 = a
End Sub



其结果输出的是第2列出来! 符合你的要求 详细思路可从 command1下的代码得出
回复
liyantsc 2007-12-26
用API函数.取鼠标位置,然后再用SENDMESSAGE发送消息
回复
jly377826 2007-12-22
Dim arr() As String '//定义数组
Dim strLine As String '
Open App.Path & "\1.txt" For Input As #1 '//读取 1.txt文件
strLine = StrConv(InputB(LOF(1), 1), vbUnicode)
arr = Split(strLine, vbCrLf) '//分割数组下标 从 0
Close #1
Text1.Text = arr(Text2.Text) '//下标从0开始

也可以用 redim preserve 修改数组下标
回复
RIVERBASIN 2007-12-22
我要求的是列数据啊
回复
一掌定乾坤 2007-12-16
首先,你把data.txt中的数据读取到Text1.text中,
然后执行下列代码。。。
Dim txt() As String
txt = Split(Text1.Text, vbCrLf)
MsgBox (txt(1))
'txt(0) 是第一行
'txt(1) 是第二行
'txt(N) 是第N行
回复
RIVERBASIN 2007-12-15
谢谢LS的回答,不过数据是数位不是一个定值!
不过还是要谢谢
回复
dccrazyboy 2007-12-15
Mid(a,p,[,n])
a为你要找的字符串,input进来
p从第几个开始
n为取几个字符
如b=Mid("123456",2,3)
那么b=“234”

flexgrid是什么?我没听说过,请别的大虾指教
回复
RIVERBASIN 2007-12-15
如data.txt中的文件为:
1 2 3 4
2 3 4 5
12 6 7 6

我想要读取第二列的数据
然后导入到flexgrid中

请大虾指导
回复
RIVERBASIN 2007-12-15
mid 怎么用?
回复
dccrazyboy 2007-12-15
如果你能确定规律,用Mid不就行了.
回复
浪客 2007-12-15
dim arr() as string
dim strLine as string

Open "TESTFILE" For Input As #1
Line Input #1, strLine

arr= strLine

arr里面就是分开的每个数据。
arr(2)就是你要的第二列数据
回复
发动态
发帖子
VB基础类
创建于2007-09-28

7453

社区成员

VB 基础类
申请成为版主
社区公告
暂无公告