程序是这样的 Private Sub Command1_Click()
Dim id$, name$, price$, store$ '声明变量属性
Open "fetch.txt" For Input As #1
Do While Not EOF(1)
Input #1, id, name, price, store ' 将数据读入到四个变量中
Print id, name, price, store '输出数据
Loop
Close #1
MsgBox "完成"
End Sub
文本内容是
AUH,010000T15805,T155,20141019
AUH,010000T15805,T155,20141020
AUH,010000T15805,T155,20141021
AUH,2400000Z510A,Z51,20141019
AUH,2400000Z510A,Z51,20141020
AUH,2400000Z510A,Z51,20141021

解决方案 »

  1.   

    你这个代码,要正常读取文件内容但又不“出错”,有一个限制条件:
      你那个文本文件fetch.txt最后一行不能够以“回车、换行”符结尾!简单的“感观判断”,就是你用记事本程序打开这个文件后,
    它的“最末尾”一行不是一个空行;
    你按键盘“Ctrl + End”,光标在141021的“1”后面闪烁,而不是在一个空白行的起始处。
      

  2.   

    Private Sub Command1_Click()
    On Error Resume Next
    Dim id$, name$, price$, store$ '声明变量属性
    Open "fetch.txt" For Input As #1
    Do While Not EOF(1)
    Input #1, id, name, price, store ' 将数据读入到四个变量中
    Print id, name, price, store '输出数据
    Loop
    Close #1
    MsgBox "完成"
    End Sub
      

  3.   

    最讨厌的就是这种“掩耳盗铃”的做法!

    尺有所短,寸有所长。

    你这样处理,长个狗P!!!
    读文件的时候,“成员值”没读取到、甚至出现“指鹿为马”都不知道!楼主的文件内容,可以认定是“数据记录表”,具有“字段”属性。
    我觉得真正要“严谨处理”,根本不应该用Input语句直接读取。
    因为文件是纯文本的内容,格式可能出现“随意性”:
    若是中间出现空行,或者某行多了(或者少了)一、两个逗号,
    结果就是直接导致读取到的成员值“张冠李戴”!
    然而,出现这些现象时,读数据的过程表现出来是“正常的”,出了错都不知道!
    读取到的数据都错了,“后续处理”能够正确吗???应该用 Line Input语句读取、用Split拆分成员(字段)、再给各个变量分别赋值。
    这样的过程虽然繁琐点,但是有一些好处:
    1. 文件中的空行,可以直接跳过。这样无论中间还是末尾的空行,不影响运行。
      同时,直接解决了楼主遇到的这种“超出文件结尾”的异常。
    2. 每行有多少个“字段”,可以检查一下,不符合要求即可提示出错。
      如果读取时对“行号”进行累加,还可以提示是在文件的第几行出错。
    3. 可以对每行的“特定字段”进行格式校验,如果不符合要求,同样可以提示出错。
      楼主的文件,最明显的是第4个字段,应该是“日期格式”;
      第3个字段,应该是特定的几个字母+数字的格式;
      第1个字段,应该是特定的一组代号中的某一个。
      这3个字段都是很容易进行校验的地方,如果有必要就可以加到读取过程中,不能通过校验就可提示内容出错。
      

  4.   

    楼主别不吱声,回来好好看看楼上的答复。。话说我基本从来没用过inpu语句,都是line input或者就是input函数。
    Dim id$
    Open "c:\1.txt" For Input As #1
    id = Input(LOF(1), #1)
    Close #1
    Print id
    建议楼主都全部读取到字符串里,然后用字符串分割的方式进行处理。 不知道楼主贴出的代码的上下文是什么,为什么说“内容要赋值给变量这个不能改”,如果楼主是对vb一窍不通而不敢动随便动前人留下的代码那么建议贵司找vb专业的人来搞好了,因为对于小白的话上面几位说的每一句话估计都很难消化,所以直接不吱声了。。
      

  5.   

    最讨厌的就是这种“掩耳盗铃”的做法!

    尺有所短,寸有所长。

    你这样处理,长个狗P!!!
    读文件的时候,“成员值”没读取到、甚至出现“指鹿为马”都不知道!楼主的文件内容,可以认定是“数据记录表”,具有“字段”属性。
    我觉得真正要“严谨处理”,根本不应该用Input语句直接读取。
    因为文件是纯文本的内容,格式可能出现“随意性”:
    若是中间出现空行,或者某行多了(或者少了)一、两个逗号,
    结果就是直接导致读取到的成员值“张冠李戴”!
    然而,出现这些现象时,读数据的过程表现出来是“正常的”,出了错都不知道!
    读取到的数据都错了,“后续处理”能够正确吗???应该用 Line Input语句读取、用Split拆分成员(字段)、再给各个变量分别赋值。
    这样的过程虽然繁琐点,但是有一些好处:
    1. 文件中的空行,可以直接跳过。这样无论中间还是末尾的空行,不影响运行。
      同时,直接解决了楼主遇到的这种“超出文件结尾”的异常。
    2. 每行有多少个“字段”,可以检查一下,不符合要求即可提示出错。
      如果读取时对“行号”进行累加,还可以提示是在文件的第几行出错。
    3. 可以对每行的“特定字段”进行格式校验,如果不符合要求,同样可以提示出错。
      楼主的文件,最明显的是第4个字段,应该是“日期格式”;
      第3个字段,应该是特定的几个字母+数字的格式;
      第1个字段,应该是特定的一组代号中的某一个。
      这3个字段都是很容易进行校验的地方,如果有必要就可以加到读取过程中,不能通过校验就可提示内容出错。

    这种人最TM会误导人,人家说东他说西.
    还老喜欢乱教人
    我都懒得和他说话. 
      

  6.   

    对于楼主的内容
    我建议这样处理
    用Lineinput
    然后每行读入的数据再进行判断
    如果是格式不对的话,就丢弃掉.
    下面是伪代码,懒得开vb了
    line input#1,data1
    Dim x() as string
    x=Split(data1,",")
    if ubound(x)=4'如果他分出来是4项就说明格式正常
    id=x(0)
    name=x(1)
    price=x(2)
    store=x(3)
    Print id, name, price, store '输出数据
    end if
      

  7.   


    Private Sub Command1_Click()
    Dim FileName as string,FN as integer,DataStr as string,DaraArr() as string
    Dim I As integer,Arr() As string
    FileName=App.Path &"\fetch.txt"
    FN=FreeFile
    Open FileName For Binary As FN
    DataStr=Space(LOF(FN))
    Get #FN,,DataStr
    Close #fn
    DataArr=Split(DataStr,vbCrLf)
    For I=0 To Ubound(DataArr)
      if Len(DataArr(i))>0 Then
        Arr=Split(DataArr(i),",")
        Print Arr(0),Arr(1),Arr(2),Arr(3)
      End if
    next
    MsgBox "完成"
    End Sub
      

  8.   

    我个人不喜欢用open语句,更喜欢用FSO,因为open太难以理解了。如果仅仅是为了输出数据我觉得有一个更好的办法,就是用excel,打开文本文件的同时进行分列操作,然后就呈现出一个二维表了。这样代码也不会太多,5行应该可以了。
      

  9.   

    Private Sub Command1_Click()
        Dim id As String, name As String, price As String, store As String 'ÉùÃ÷±äÁ¿ÊôÐÔ
        Dim strLine As String, strCol() As String
        
        Open "c:/test/fetch.txt" For Input As #1
        Do While Not EOF(1)
            Line Input #1, strLine
            If strLine > "" Then
                strCol = Split(strLine, ",")
                id = strCol(0)
                name = strCol(1)
                price = strCol(2)
                store = strCol(3)
                Debug.Print id, name, price, store 'Êä³öÊý¾Ý
            End If
        Loop
        Close #1
        MsgBox "完成"
    End SubAUH           010000T15805  T155          20141019
    AUH           010000T15805  T155          20141020
    AUH           010000T15805  T155          20141021
    AUH           2400000Z510A  Z51           20141019
    AUH           2400000Z510A  Z51           20141020
    AUH           2400000Z510A  Z51           20141021