vb问题 高手请进
先看下程序代码:'***************************取文本最后一行*****************************PrivateFuncti...
先看下程序代码:
'***************************取文本最后一行*****************************
Private Function readLastLine(ByVal strFileName As String) As String
Dim objFSO As Object
Dim objTextStream As Object
Dim strReturn As String
Dim lngTime As Single
Dim VarData(1) As Variant
Dim Itime As Integer '时间循环变量,同时为行循环变量
Dim Iline As Integer '列循环变量
Dim i As Integer
i = 3
Me.MousePointer = vbHourglass
' On Error Resume Next
'// 创建 FileSystemObject 对象
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFSO.OpenTextFile(strFileName, 1)
lngTime = Timer
With objTextStream
Do While Not .AtEndOfStream
DoEvents
strReturn = .ReadLine
.SkipLine
If Not .AtEndOfStream Then strReturn = .ReadLine
Loop
readLastLine = strReturn
.Close
End With
Debug.Print Timer - lngTime
Me.MousePointer = vbDefault
Set objTextStream = Nothing
Set objFSO = Nothing
End Function
'***************************取文本最后一行*****************************
Private Sub Command1_Click()
Text1.Text = readLastLine("C:\temp\1.his")
VarData = Split(Text1.Text, ",", 6)
End Sub
到了这里就把一篇文章的最后一行读取出来的,后面的split函数不用管了,下面就是要出的问题了,这样运行一编只是把一个文件的最后一行读取出来,而着个程序的主要目的是把多个文件的最后一行数据全组合起来放到一个文件里,我尝试用下面的方法
Private Sub Command1_Click()
Dim path As Variant '定义路径文件名数组
path = Array(123456789, "C:\1.his", "C:\2.his", "C:\3.his", "C:\4.his", "C:\5.his", "C:\6.his", "C:\7.his", "C:\8.his")
'数组初赋值
Text1.Text = readLastLine(path(i))
VarData = Split(Text1.Text, ",", 6)
i = i + 1
If i = 8 Then
i = 0
End If
End Sub
但当输出第一次值后以后就不会改变了,就是说后面不管怎么循环读取的都是第一个文件的值,不知道为什么,是不是因为程序不在鼠标事件里的缘故。
我现在又考虑把读取最后一行的程序放到这个程序外部,在编写个程序调用他,读取结束后关闭程序,重复打开关闭来实现,不知道可行不可行,我没学过vb,这纯粹是硬着头皮上的,希望各位高手给点意见。
不给原代码没关系,给我个可行的方法,还有相关的学习资料也就行了,
最后再重复一编题,同时读取很多文件的最后一行数据,剩下的问题自己已经解决。
100分放上了,只要您帮我,双手奉上,说明详细的可能继续追加
谢谢
2楼的意思我明白,你可以看下我的代码,我每运行一次鼠标事件,循环变量i增加1,这样和你所说的循环没什么区别,请先看清题,我要求同时读取多个文件的最后一行,我写的哪个程序段,当读取了第一次值后就没有其他动作了,也就是说当读完第一个文件的值后,我再读第二个文件事,显示的值仍然是第一个文件的
追加50分,悬赏高手 展开
'***************************取文本最后一行*****************************
Private Function readLastLine(ByVal strFileName As String) As String
Dim objFSO As Object
Dim objTextStream As Object
Dim strReturn As String
Dim lngTime As Single
Dim VarData(1) As Variant
Dim Itime As Integer '时间循环变量,同时为行循环变量
Dim Iline As Integer '列循环变量
Dim i As Integer
i = 3
Me.MousePointer = vbHourglass
' On Error Resume Next
'// 创建 FileSystemObject 对象
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFSO.OpenTextFile(strFileName, 1)
lngTime = Timer
With objTextStream
Do While Not .AtEndOfStream
DoEvents
strReturn = .ReadLine
.SkipLine
If Not .AtEndOfStream Then strReturn = .ReadLine
Loop
readLastLine = strReturn
.Close
End With
Debug.Print Timer - lngTime
Me.MousePointer = vbDefault
Set objTextStream = Nothing
Set objFSO = Nothing
End Function
'***************************取文本最后一行*****************************
Private Sub Command1_Click()
Text1.Text = readLastLine("C:\temp\1.his")
VarData = Split(Text1.Text, ",", 6)
End Sub
到了这里就把一篇文章的最后一行读取出来的,后面的split函数不用管了,下面就是要出的问题了,这样运行一编只是把一个文件的最后一行读取出来,而着个程序的主要目的是把多个文件的最后一行数据全组合起来放到一个文件里,我尝试用下面的方法
Private Sub Command1_Click()
Dim path As Variant '定义路径文件名数组
path = Array(123456789, "C:\1.his", "C:\2.his", "C:\3.his", "C:\4.his", "C:\5.his", "C:\6.his", "C:\7.his", "C:\8.his")
'数组初赋值
Text1.Text = readLastLine(path(i))
VarData = Split(Text1.Text, ",", 6)
i = i + 1
If i = 8 Then
i = 0
End If
End Sub
但当输出第一次值后以后就不会改变了,就是说后面不管怎么循环读取的都是第一个文件的值,不知道为什么,是不是因为程序不在鼠标事件里的缘故。
我现在又考虑把读取最后一行的程序放到这个程序外部,在编写个程序调用他,读取结束后关闭程序,重复打开关闭来实现,不知道可行不可行,我没学过vb,这纯粹是硬着头皮上的,希望各位高手给点意见。
不给原代码没关系,给我个可行的方法,还有相关的学习资料也就行了,
最后再重复一编题,同时读取很多文件的最后一行数据,剩下的问题自己已经解决。
100分放上了,只要您帮我,双手奉上,说明详细的可能继续追加
谢谢
2楼的意思我明白,你可以看下我的代码,我每运行一次鼠标事件,循环变量i增加1,这样和你所说的循环没什么区别,请先看清题,我要求同时读取多个文件的最后一行,我写的哪个程序段,当读取了第一次值后就没有其他动作了,也就是说当读完第一个文件的值后,我再读第二个文件事,显示的值仍然是第一个文件的
追加50分,悬赏高手 展开
3个回答
展开全部
Private Sub Command1_Click()
Dim path As Variant '定义路径文件名数组
path = Array("C:\1.his", "C:\2.his", "C:\3.his", "C:\4.his", "C:\5.his", "C:\6.his", "C:\7.his", "C:\8.his")
'数组初赋值
Dim i As Integer
For i = 0 To 7
Text1.Text = readLastLine(path(i))
VarData = Split(Text1.Text, ",", 6)
Next
End Sub
这么简单的问题你看看书知道怎么回事了
补充:
原来你想这样。你不会单步执行一下看看你的i是不是每次都会变成0?把选项 强制变量声明 打开,养成变量声明的好习惯,不然以后你转到其他语言会很不习惯的。
Option Explicit
Private Sub Command1_Click()
Static i as integer
Dim path As Variant '定义路径文件名数组
path = Array("C:\1.his", "C:\2.his", "C:\3.his", "C:\4.his", "C:\5.his", "C:\6.his", "C:\7.his", "C:\8.his")
'数组初赋值
Text1.Text = readLastLine(path(i))
VarData = Split(Text1.Text, ",", 6)
i = i + 1
If i > 7 Then
i = 0
End If
End Sub
Dim path As Variant '定义路径文件名数组
path = Array("C:\1.his", "C:\2.his", "C:\3.his", "C:\4.his", "C:\5.his", "C:\6.his", "C:\7.his", "C:\8.his")
'数组初赋值
Dim i As Integer
For i = 0 To 7
Text1.Text = readLastLine(path(i))
VarData = Split(Text1.Text, ",", 6)
Next
End Sub
这么简单的问题你看看书知道怎么回事了
补充:
原来你想这样。你不会单步执行一下看看你的i是不是每次都会变成0?把选项 强制变量声明 打开,养成变量声明的好习惯,不然以后你转到其他语言会很不习惯的。
Option Explicit
Private Sub Command1_Click()
Static i as integer
Dim path As Variant '定义路径文件名数组
path = Array("C:\1.his", "C:\2.his", "C:\3.his", "C:\4.his", "C:\5.his", "C:\6.his", "C:\7.his", "C:\8.his")
'数组初赋值
Text1.Text = readLastLine(path(i))
VarData = Split(Text1.Text, ",", 6)
i = i + 1
If i > 7 Then
i = 0
End If
End Sub
展开全部
vrhero 的回答是正解,看到了100分才进来的,可惜啊,已经有人回答了,要是我早来几个小时就好啦,100分,太诱人啦。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主的意思是点击一次就读一个文件还是点击一次就读所有的8个文件?
如果是点击一次就读一个文件的话,则在COMMAND1_CLICK()事件内加入i的静态定义,
Static i as integer
如果是点击一次就读所有的8个文件拿vrhero的答案应该就是对的了.
或许我也没看懂你到底要问什么吧,还有疑问的话就给我发百度的消息好了.
下午2:00上班..
如果是点击一次就读一个文件的话,则在COMMAND1_CLICK()事件内加入i的静态定义,
Static i as integer
如果是点击一次就读所有的8个文件拿vrhero的答案应该就是对的了.
或许我也没看懂你到底要问什么吧,还有疑问的话就给我发百度的消息好了.
下午2:00上班..
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询