当前位置:编程学习 > VB >>

vb:我想利用vb调取文本文件中的数据?

2009110901 54425 4042 11748 0003 0008=
2009110901 54429 4020 11795 0000 0005=
2009110901 54430 4077 11815 0001 0000=
2009110901 54432 4060 11848 0000 0000=
2009110901 54434 4017 11830 0000 0000=
2009110901 54436 4040 11895 0002 0001=
2009110901 54522 3988 11773 0000 0000=
NNNN


我想读取把第二列里为54429和54432的这两行读出来,其它的不要,应该怎么处理啊?
还有,碰到最后NNNN,我想结束程序,应该怎么办? --------------------编程问答-------------------- 格式是固定的么?如果是,则open for output,do until eof(记录名),逐行读取,判断字符串中的第12位至16位的内容是否是54429或54432 --------------------编程问答-------------------- 只读那两个数据,怎么会碰上 NNNN ?
--------------------编程问答-------------------- 用input line读取每行,用split分割每行字符串为数组ss(),
ss(1)和ss(2)就是你要的,
用if判断标志"NNNN",是就退出循环
代码很简单,自己搜吧 --------------------编程问答-------------------- 更正 input line 为line input --------------------编程问答--------------------  Open "***.***" For Input As #1

 Close #1
--------------------编程问答--------------------
引用 2 楼 chen8013 的回复:
只读那两个数据,怎么会碰上 NNNN ?


估计楼主的 NNNN是表示底下还有很多条数据~ --------------------编程问答-------------------- 上代码,能不能懂看楼主的造化。
Option Explicit


Private Sub Command1_Click()

    Const LINEWIDTH& = 40   '如果是 vbLF 定界的,改成 39
    Const DATAWIDDH& = 5    '数据是5个字符
    Const OFFSET& = 12      '数据从第12个字符开始
    Dim iFN&, strTemp$
    Dim lVarA&, lVarB&
    
    strTemp = Space(DATAWIDDH)
    iFN = FreeFile()
    Open "X:\Temp\Test.txt" For Binary As iFN       '打开文件
    Get iFN, LINEWIDTH * (2 - 1) + OFFSET, strTemp  '读第2行
    lVarA = CLng(strTemp)
    Get iFN, LINEWIDTH * (3 - 1) + OFFSET, strTemp  '读第3行
    lVarB = CLng(strTemp)
    Close iFN
    MsgBox lVarA & vbLf & lVarB, 64

End Sub

--------------------编程问答-------------------- 一次性读进 然后用正则表达式匹配:
^[^\s]*?\s(?:54429|54432)\s.*?$
--------------------编程问答-------------------- 建意将数据存储在XML文件中,这样比存储在文本文件中要好.
读取文本文件中数据需要一行一行读取,读取的数据出错可能性大. --------------------编程问答--------------------
Private Sub Form_Load()
    Dim strData$
    Dim reg As Object
    Dim matchs As Object, match As Object
    
    strData = "2009110901 54425 4042 11748 0003 0008= " & vbCrLf & _
                "2009110901 54429 4020 11795 0000 0005= " & vbCrLf & _
                "2009110901 54430 4077 11815 0001 0000= " & vbCrLf & _
                "2009110901 54432 4060 11848 0000 0000= " & vbCrLf & _
                "2009110901 54434 4017 11830 0000 0000= " & vbCrLf & _
                "2009110901 54436 4040 11895 0002 0001= " & vbCrLf & _
                "2009110901 54522 3988 11773 0000 0000= "
                
    Set reg = CreateObject("vbscript.regexp")
    reg.Global = True
    reg.IgnoreCase = True
    reg.MultiLine = True
    reg.Pattern = "^\d+?\s(?:54429|54432)\s.*?$"
    Set matchs = reg.Execute(strData)
    For Each match In matchs
        Debug.Print match.Value
    Next
End Sub
--------------------编程问答-------------------- 中文注释多点好 --------------------编程问答-------------------- Dim strLine As String, strItem() As String

Open App.Path & "test.txt" For Input As #1

Do Until EOF(1)
    Line Input #1, strLine
    If Left(strLine, 4) = "NNNN" Then Exit Do

    strItem = Split(strLine, " ")
    if Ubound(strItem) Then
        If (strItem(1) = 54429) Or (strItem(1) = 54432) Then
            Debug.Print strLine
        End If
    End If
Loop

Close #1

     --------------------编程问答--------------------

Private Sub Command1_Click()
   Open "c:\temp\111.txt" For Input As #1
   Dim istr As String
   Do
     Line Input #1, istr
     If Split(istr)(1) = 54429 Or Split(istr)(1) = 54432 Then
        Debug.Print istr
     End If
   Loop While Trim(istr) <> "NNNN" Or Not EOF(1)
   MsgBox "OK"  
End Sub
--------------------编程问答-------------------- 都是强人
补充:VB ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,