VB编程改写代码
答案:3 悬赏:40 手机版
解决时间 2021-04-07 12:47
- 提问者网友:美人性情
- 2021-04-07 04:41
VB编程改写代码
最佳答案
- 五星知识达人网友:洎扰庸人
- 2021-04-07 04:50
Sub Main()
Dim lngTmp As ULong
Dim filename As String = "d:\test.txt" '改成你的文件路径
Dim fs As New IO.FileStream(filename, IO.FileMode.Open)
Dim sr As New IO.StreamReader(fs)
lngTmp = 0
Do
sr.ReadLine()
lngTmp = lngTmp + 1
Loop Until sr.EndOfStream
fs.Close()
sr.Close()
Console.WriteLine(lngTmp.ToString)
Console.ReadKey()
End Sub
VS2010中的代码追答
追问:按行读入?这样效率不是很高吧~
追答:你提供的VB6的代码事实上也是使用的按行读取实现,且超长字符的Unicode转换也是很耗时间的
追问:我提供的是按二进制的方式读取的(具体我也不太理解),我在excel vba中测试过了,速度明显快很多~
追答:Sub Main()
Dim lngTmp As ULong
Dim filename As String = "d:\test.txt" '改成你的文件路径
Dim sr As New IO.StreamReader(filename)
lngTmp = sr.ReadToEnd().Split(Environment.NewLine.ToCharArray, System.StringSplitOptions.RemoveEmptyEntries).Length
sr.Close()
Console.WriteLine(lngTmp.ToString)
Console.ReadKey()
End Sub
这次应该和VB6的差不多,不过,文件中不能有空行
Dim lngTmp As ULong
Dim filename As String = "d:\test.txt" '改成你的文件路径
Dim fs As New IO.FileStream(filename, IO.FileMode.Open)
Dim sr As New IO.StreamReader(fs)
lngTmp = 0
Do
sr.ReadLine()
lngTmp = lngTmp + 1
Loop Until sr.EndOfStream
fs.Close()
sr.Close()
Console.WriteLine(lngTmp.ToString)
Console.ReadKey()
End Sub
VS2010中的代码追答
追问:按行读入?这样效率不是很高吧~
追答:你提供的VB6的代码事实上也是使用的按行读取实现,且超长字符的Unicode转换也是很耗时间的
追问:我提供的是按二进制的方式读取的(具体我也不太理解),我在excel vba中测试过了,速度明显快很多~
追答:Sub Main()
Dim lngTmp As ULong
Dim filename As String = "d:\test.txt" '改成你的文件路径
Dim sr As New IO.StreamReader(filename)
lngTmp = sr.ReadToEnd().Split(Environment.NewLine.ToCharArray, System.StringSplitOptions.RemoveEmptyEntries).Length
sr.Close()
Console.WriteLine(lngTmp.ToString)
Console.ReadKey()
End Sub
这次应该和VB6的差不多,不过,文件中不能有空行
全部回答
- 1楼网友:渊鱼
- 2021-04-07 06:13
txt文件读到数组中并不是什么困难的技巧,不知道为何要执着修改这段代码。
追问:是的,但是效率存在差异,按照一般的方法按行读入的话也可以,但是速度明显比我发的那个慢~O(∩_∩)O~
追问:是的,但是效率存在差异,按照一般的方法按行读入的话也可以,但是速度明显比我发的那个慢~O(∩_∩)O~
- 2楼网友:骨子里都是戏
- 2021-04-07 05:25
我给你一个,窗体上加个按钮就可以,不过时间没有计算,你自己加吧!
Imports System.IO
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim r As New StreamReader(Application.StartupPath & "\ssk.txt", System.Text.Encoding.Default) '声明文件流对象并打开文件ssk.txt
Dim s As String
s = r.ReadToEnd'从打开的文件中读取全部内容到变量S
r.Close()'关闭对象
'开始获取行数
Dim Linen As Integer
Dim d() As String
d = Split(s, vbCrLf)
Linen = UBound(d) + 1
MessageBox.Show("一共有:" & CStr(Linen) & "行")
End Sub
End Class
把测试用的文本文件 ssk.txt 复制到debug文件夹里。或者你自己修改文件路径代码?
VB 2010通过。
追问:测试好了,但是速度和按行读入的差不多~您的代码8万行花费2000ms~按行读入的话要2600ms
追答:哦,我解决的是用VB 2010代替VB6代码,而且是一次读取,并采用的方法与你VB6的类似,关于速度,到是没有考虑,关于速度我也无能为力了,系统采用的语句。
Imports System.IO
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim r As New StreamReader(Application.StartupPath & "\ssk.txt", System.Text.Encoding.Default) '声明文件流对象并打开文件ssk.txt
Dim s As String
s = r.ReadToEnd'从打开的文件中读取全部内容到变量S
r.Close()'关闭对象
'开始获取行数
Dim Linen As Integer
Dim d() As String
d = Split(s, vbCrLf)
Linen = UBound(d) + 1
MessageBox.Show("一共有:" & CStr(Linen) & "行")
End Sub
End Class
把测试用的文本文件 ssk.txt 复制到debug文件夹里。或者你自己修改文件路径代码?
VB 2010通过。
追问:测试好了,但是速度和按行读入的差不多~您的代码8万行花费2000ms~按行读入的话要2600ms
追答:哦,我解决的是用VB 2010代替VB6代码,而且是一次读取,并采用的方法与你VB6的类似,关于速度,到是没有考虑,关于速度我也无能为力了,系统采用的语句。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯