VB split的用法
2016-05-20 13:38
465 查看
我用VB5读取一个文本文件,由于需逐行读取再分析计算。可是这种读入文件速度对大文件时特别慢。能否把所有文件信息全部读入缓冲区,再处理。可是又如何保证每行每行地分析数据呢。
回答:
先使用Get语句将文件读到一个字符串中,然后,使用Split函数进行逐行的分解。之所以使用Get语句,而不使用Input函数,请参考QA000051 "VB 5提示错误:"输入超出文件尾""。下面是一个示例。
Private Sub Command1_Click()
Dim s As String
s = String(FileLen("c:\a.txt"), " ")
Open "c:\a.txt" For Binary As 1
Get #1, , s
Close 1
v = Split(s, vbCrLf)
Dim i
For i = 0 To UBound(v)
List1.AddItem v(i)
Next
End Sub
Public Function Split(ByVal sIn As String, Optional sDelim As _
String, Optional nLimit As Long = -1, Optional bCompare As _
VbCompareMethod = vbBinaryCompare) As Variant
Dim sRead As String, sOut() As String, nC As Integer
If sDelim = "" Then
Split = sIn
End If
sRead = ReadUntil(sIn, sDelim, bCompare)
Do
ReDim Preserve sOut(nC)
sOut(nC) = sRead
nC = nC + 1
If nLimit <> -1 And nC >= nLimit Then Exit Do
sRead = ReadUntil(sIn, sDelim)
Loop While InStr(1, sIn, sDelim, bCompare) > 0
ReDim Preserve sOut(nC)
sOut(nC) = sIn
Split = sOut
End Function
Public Function ReadUntil(ByRef sIn As String, _
sDelim As String, Optional bCompare As VbCompareMethod _
= vbBinaryCompare) As String
Dim nPos As String
nPos = InStr(1, sIn, sDelim, bCompare)
If nPos > 0 Then
ReadUntil = Left(sIn, nPos - 1)
sIn = Mid(sIn, nPos + Len(sDelim))
End If
End Function
Visual Basic 复制代码
Imports System
Public Class SplitTest
Public Shared Sub Main()
Dim words As String = "this is a list of words, with: a bit of punctuation."
Dim split As String() = words.Split(New [Char]() {" "c, ","c, "."c, ":"c})
Dim s As String
For Each s In split
If s.Trim() <> "" Then
Console.WriteLine(s)
End If
Next s
End Sub 'Main
End Class 'SplitTest
Visual Basic(用法)
Dim instance As String
Dim separator As Char()
Dim returnValue As String()
returnValue = instance.Split(separator)
回答:
先使用Get语句将文件读到一个字符串中,然后,使用Split函数进行逐行的分解。之所以使用Get语句,而不使用Input函数,请参考QA000051 "VB 5提示错误:"输入超出文件尾""。下面是一个示例。
Private Sub Command1_Click()
Dim s As String
s = String(FileLen("c:\a.txt"), " ")
Open "c:\a.txt" For Binary As 1
Get #1, , s
Close 1
v = Split(s, vbCrLf)
Dim i
For i = 0 To UBound(v)
List1.AddItem v(i)
Next
End Sub
Public Function Split(ByVal sIn As String, Optional sDelim As _
String, Optional nLimit As Long = -1, Optional bCompare As _
VbCompareMethod = vbBinaryCompare) As Variant
Dim sRead As String, sOut() As String, nC As Integer
If sDelim = "" Then
Split = sIn
End If
sRead = ReadUntil(sIn, sDelim, bCompare)
Do
ReDim Preserve sOut(nC)
sOut(nC) = sRead
nC = nC + 1
If nLimit <> -1 And nC >= nLimit Then Exit Do
sRead = ReadUntil(sIn, sDelim)
Loop While InStr(1, sIn, sDelim, bCompare) > 0
ReDim Preserve sOut(nC)
sOut(nC) = sIn
Split = sOut
End Function
Public Function ReadUntil(ByRef sIn As String, _
sDelim As String, Optional bCompare As VbCompareMethod _
= vbBinaryCompare) As String
Dim nPos As String
nPos = InStr(1, sIn, sDelim, bCompare)
If nPos > 0 Then
ReadUntil = Left(sIn, nPos - 1)
sIn = Mid(sIn, nPos + Len(sDelim))
End If
End Function
Visual Basic 复制代码
Imports System
Public Class SplitTest
Public Shared Sub Main()
Dim words As String = "this is a list of words, with: a bit of punctuation."
Dim split As String() = words.Split(New [Char]() {" "c, ","c, "."c, ":"c})
Dim s As String
For Each s In split
If s.Trim() <> "" Then
Console.WriteLine(s)
End If
Next s
End Sub 'Main
End Class 'SplitTest
Visual Basic(用法)
Dim instance As String
Dim separator As Char()
Dim returnValue As String()
returnValue = instance.Split(separator)
相关文章推荐
- vb中split函数的用法
- 冒泡排序法---vb
- vb中的十六进制
- vb
- VB…………………………
- TVB-Gone 红外编码方法
- vba应用
- 转载:VBA中使用vlookup函数
- genymotion报错:Failed to open a session for the virtual machine,Unable to load R3 module xxxx/VBoxDD.D
- VBA——word中书签与VS的完美搭配
- vb6.0的学习心得
- 977dh用vbs通过wsh创建桌面快捷方式,快速启动,修改ie主页的恶意代码 ...
- This is usually because the "vboxsf" file system is not available.
- 使用vb.net 获取文件夹下选中文件的文件名称
- 笔记12:VB.net中的FTP操作:创建、删除、查询、下载、上传
- 截图工具
- VB作业
- VB作业
- VB作业
- OpenGL ES Shader相关API 总结【5】——VBO与VAO的作用与关系