回 帖 发 新 帖 刷新版面

主题:用VB读txt文件的的问题

现在的手头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个回复)

沙发

先按字符读入,再查逗号位置,把两逗号之间的字符分离,变为数字即可。

板凳

能不能详细一些,比如用什么类里的什么方法,调用什么函数等
谢谢

3 楼

dim 序号 as long,数值 as duoble,日期 as date
'打开文件,这个不用说吧
input #1,序号,数值,日期
'关闭文件

如果你想循环自己加一下。什么方法、什么类似乎都不需要

4 楼

不需要类呀。
  对字符串逐个查逗号,Mid(str1,i,1).由i定位置,记录位置。
  把每两个逗号间的字符串考到数组中,用Trim()和Val()把它变成数字。
  2005年1月17日之类的不能变成数字的。

5 楼

下面是读取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 楼

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

我来回复

您尚未登录,请登录后再回复。点此登录或注册