主题:用VB读txt文件的的问题
klaude
[专家分:0] 发布于 2009-04-07 16:56:00
现在的手头txt文件是按照这样的格式储存的,中间都用中文标点的逗号隔开。
ID,营业额,日期
如:100001,198.82,2006年12月7日
又如:200012,325635.82,2005年1月17日
现在想用VB编一个程序,读这个txt文件,并按照上诉的的格式,将这三个数读入内存,并赋值给三个变量,用来插入数据库(即将100001赋给变量A,将198.82赋给变量B,将2006年12月7日赋给变量C)
请高手赐教了
回复列表 (共6个回复)
沙发
糊涂大虫 [专家分:580] 发布于 2009-04-07 17:18:00
先按字符读入,再查逗号位置,把两逗号之间的字符分离,变为数字即可。
板凳
klaude [专家分:0] 发布于 2009-04-07 17:33:00
能不能详细一些,比如用什么类里的什么方法,调用什么函数等
谢谢
3 楼
老大徒伤悲 [专家分:29120] 发布于 2009-04-08 08:12:00
dim 序号 as long,数值 as duoble,日期 as date
'打开文件,这个不用说吧
input #1,序号,数值,日期
'关闭文件
如果你想循环自己加一下。什么方法、什么类似乎都不需要
4 楼
糊涂大虫 [专家分:580] 发布于 2009-04-08 17:51:00
不需要类呀。
对字符串逐个查逗号,Mid(str1,i,1).由i定位置,记录位置。
把每两个逗号间的字符串考到数组中,用Trim()和Val()把它变成数字。
2005年1月17日之类的不能变成数字的。
5 楼
singlion [专家分:690] 发布于 2009-04-08 20:58:00
下面是读取txt文本文件来查询手机归属地的,和你这个一样
Dim tStr As String, t As Long, tt As Long, MobileNum() As String, MobileAdr() As String, MobileCar() As String, Records As Long
Sub Alert(cap As String, Optional time As Long = 2000)
If cap = "" Then Exit Sub
tt = time
AlertLable.Visible = True
AlertLable.Caption = cap
Timer1.Enabled = True
End Sub
Private Sub Command1_Click()
Dim i As Long, s As String, r As Long
s = Mid(Text1.Text, 1, 7)
r = 0
For i = 0 To Records - 1
If MobileNum(i) = s Then
r = i
Exit For
End If
Next
If r = 0 Then
MsgBox "没有找到匹配的结果!", vbExclamation, "抱歉"
Else
Text2.Text = MobileAdr(r)
Text3.Text = MobileCar(r)
End If
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End Sub
Private Sub Form_Load()
Dim fn As Long, LineStr As String, s() As String, i As Integer
iniFrm.process.Caption = "0%"
iniFrm.Show
fn = FreeFile
Records = 0
Open App.Path & "\list.txt" For Input As #fn
Do While Not EOF(fn)
DoEvents
Records = Records + 1
iniFrm.process.Caption = Fix(Records / 154000 * 100) & "%"
ReDim Preserve MobileNum(Records)
ReDim Preserve MobileAdr(Records)
ReDim Preserve MobileCar(Records)
Line Input #fn, LineStr
s = Split(LineStr, ",")
MobileNum(Records) = s(0)
MobileAdr(Records) = s(1)
MobileCar(Records) = s(2)
Loop
Close #fn
Unload iniFrm
Text2.Text = ""
Text3.Text = ""
tStr = "<在这里输入手机号码>"
End Sub
Private Sub Label3_Click()
AboutFrm.Show 1
End Sub
Private Sub Text1_Change()
Dim i As Long, l As Integer, s As String
l = Len(Text1.Text)
If l = 0 Then Exit Sub
AlertLable.Visible = False
For i = 1 To l
s = Mid(Text1.Text, i, 1)
If Asc(s) < Asc(0) Or Asc(s) > Asc(9) Then
Alert "只能输入数字"
Text1.SelStart = i - 1
Text1.SelLength = 1
End If
Next
End Sub
Private Sub Text1_GotFocus()
If Text1.Text = tStr Then
Text1.Text = ""
Text1.ForeColor = &H0&
Else
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End If
End Sub
Private Sub Text1_LostFocus()
If Len(Text1.Text) = 0 Then
Text1.Text = tStr
Text1.ForeColor = &HC0C0C0
End If
End Sub
Private Sub Timer1_Timer()
t = t + 100
If t >= tt Then
Timer1.Enabled = False
t = 0
AlertLable.Visible = False
End If
End Sub
6 楼
一江秋水 [专家分:9680] 发布于 2009-04-10 09:14:00
3楼的办法最简单,但有2个限制:
1.文本中不能用中文逗号做分隔符,而只能用英文逗号。
2.日期要按规定格式,不能写成2006年12月7日,所以把日期变量改用字符型的就行了。
还有一个比较简单的办法:
Dim A As String, B() As String
Open "全路径文件名" For Input As #1
Do While Not EOF(1)
Input #1, A '读入一行字符
B = Split(A, ",") '以中文逗号为分隔符
Debug.Print B(0), B(1), B(2) '对3个变量的处理
Loop
Close #1
End Sub
我来回复