程序是这样的 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
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
你那个文本文件fetch.txt最后一行不能够以“回车、换行”符结尾!简单的“感观判断”,就是你用记事本程序打开这个文件后,
它的“最末尾”一行不是一个空行;
你按键盘“Ctrl + End”,光标在141021的“1”后面闪烁,而不是在一个空白行的起始处。
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
尺有所短,寸有所长。
你这样处理,长个狗P!!!
读文件的时候,“成员值”没读取到、甚至出现“指鹿为马”都不知道!楼主的文件内容,可以认定是“数据记录表”,具有“字段”属性。
我觉得真正要“严谨处理”,根本不应该用Input语句直接读取。
因为文件是纯文本的内容,格式可能出现“随意性”:
若是中间出现空行,或者某行多了(或者少了)一、两个逗号,
结果就是直接导致读取到的成员值“张冠李戴”!
然而,出现这些现象时,读数据的过程表现出来是“正常的”,出了错都不知道!
读取到的数据都错了,“后续处理”能够正确吗???应该用 Line Input语句读取、用Split拆分成员(字段)、再给各个变量分别赋值。
这样的过程虽然繁琐点,但是有一些好处:
1. 文件中的空行,可以直接跳过。这样无论中间还是末尾的空行,不影响运行。
同时,直接解决了楼主遇到的这种“超出文件结尾”的异常。
2. 每行有多少个“字段”,可以检查一下,不符合要求即可提示出错。
如果读取时对“行号”进行累加,还可以提示是在文件的第几行出错。
3. 可以对每行的“特定字段”进行格式校验,如果不符合要求,同样可以提示出错。
楼主的文件,最明显的是第4个字段,应该是“日期格式”;
第3个字段,应该是特定的几个字母+数字的格式;
第1个字段,应该是特定的一组代号中的某一个。
这3个字段都是很容易进行校验的地方,如果有必要就可以加到读取过程中,不能通过校验就可提示内容出错。
Dim id$
Open "c:\1.txt" For Input As #1
id = Input(LOF(1), #1)
Close #1
Print id
建议楼主都全部读取到字符串里,然后用字符串分割的方式进行处理。 不知道楼主贴出的代码的上下文是什么,为什么说“内容要赋值给变量这个不能改”,如果楼主是对vb一窍不通而不敢动随便动前人留下的代码那么建议贵司找vb专业的人来搞好了,因为对于小白的话上面几位说的每一句话估计都很难消化,所以直接不吱声了。。
尺有所短,寸有所长。
你这样处理,长个狗P!!!
读文件的时候,“成员值”没读取到、甚至出现“指鹿为马”都不知道!楼主的文件内容,可以认定是“数据记录表”,具有“字段”属性。
我觉得真正要“严谨处理”,根本不应该用Input语句直接读取。
因为文件是纯文本的内容,格式可能出现“随意性”:
若是中间出现空行,或者某行多了(或者少了)一、两个逗号,
结果就是直接导致读取到的成员值“张冠李戴”!
然而,出现这些现象时,读数据的过程表现出来是“正常的”,出了错都不知道!
读取到的数据都错了,“后续处理”能够正确吗???应该用 Line Input语句读取、用Split拆分成员(字段)、再给各个变量分别赋值。
这样的过程虽然繁琐点,但是有一些好处:
1. 文件中的空行,可以直接跳过。这样无论中间还是末尾的空行,不影响运行。
同时,直接解决了楼主遇到的这种“超出文件结尾”的异常。
2. 每行有多少个“字段”,可以检查一下,不符合要求即可提示出错。
如果读取时对“行号”进行累加,还可以提示是在文件的第几行出错。
3. 可以对每行的“特定字段”进行格式校验,如果不符合要求,同样可以提示出错。
楼主的文件,最明显的是第4个字段,应该是“日期格式”;
第3个字段,应该是特定的几个字母+数字的格式;
第1个字段,应该是特定的一组代号中的某一个。
这3个字段都是很容易进行校验的地方,如果有必要就可以加到读取过程中,不能通过校验就可提示内容出错。
这种人最TM会误导人,人家说东他说西.
还老喜欢乱教人
我都懒得和他说话.
我建议这样处理
用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
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
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