今天是:
设百科问答网为首页|收藏百科问答网|网站地图
百科问答网 - 帮您解决问题,分享成功经验

VB如何读大的文本文件?


Dim strFileString As String
  Dim lFileLen1 As Long
  Dim strFile as string

  strFile="C:\big.txt"

    lFileLen1 = FileLen(strFile) //7168226

    Open strFile For Input As #1
    Input #1, strFileString
    Close #1
    lFileLen1 = Len(strFileString) //只能读出5858740

  请问这怎么样才能全部读到内存字符串中? 谢谢!
 
文件有30多M



答案或建议:


'返回以行数组表示的文本文件内容。tStrings()的每个元素是文本的一行。默认间隔符号是换行。
Dim tStrings() As String
tStrings()=StringsByFile(tFileName)

如果你的每个记录是以"?"间隔,则这样读:

Dim tStrings() As String
tStrings()=StringsByFile(tFileName,"?")


'返回以String表示的文本文件内容(包括换行符)。tText包含了文本当中所有内容(含换行符号)
Dim tText As String
tText=TextGetByFile(tFileName)

下面的函数有依存关系,必须同时存在。

Public Function StringsByFile(ByVal tFileName As String, Optional ByVal pDelimiter As String = vbCrLf) As String()

  Dim tOutStrings() As String
 
  Dim tText As String
 
  tText = TextGetByFile(tFileName)
 
  tOutStrings() = Split(tText, pDelimiter)
 
  StringsByFile = tOutStrings()
End Function

Public Function TextGetByFile(ByVal tFileName As String) As String
  Dim tOutText As String
 
  Dim tBytes() As Byte
 
  tBytes() = BytesGetByFile(tFileName)
 
  tOutText = StrConv(tBytes(), vbUnicode)
 
  TextGetByFile = tOutText
End Function

Public Function BytesGetByFile(ByVal tFileName As String, Optional ByVal pFileStart As Long = 1) As Byte()
  Dim tOutBytes() As Byte
  Dim tOutBytes_Length As Long
 
  Dim tFileNumber As Integer
  Dim tFileSize As Long
 
  tFileNumber = FreeFile
 
  Open tFileName For Binary As #tFileNumber
   
    tFileSize = LOF(tFileNumber)
   
    tOutBytes_Length = tFileSize - pFileStart
   
    ReDim tOutBytes(tOutBytes_Length)
   
    Get #tFileNumber, pFileStart, tOutBytes()
   
  Close #tFileNumber
 
  BytesGetByFile = tOutBytes()
End Function

解释一下我上面函数的原理:
1、BytesGetByFile函数以二进制方式获得文本文件的Byte数组。
2、TextGetByFile函数用StrConv函数将以ANSI格式存储的文本文件Byte数组转换为Unicode格式的String。得到文本文件的全部文本内容,并以一个String返回。
3、StringsByFile函数以Split函数根据你定义的分隔符(默认是换行vbCrLf,你需要的是"?"),根据分隔符将String分割为String数组。
上述函数可以处理不大于2GB的文本文件。
 


文章来自:http://www.baikewenda.com/tech/dev/7/6/a192333518.htm
推荐内容

敬请注意:百科问答网内容来源于网络或民间经验收集,仅供参考。其中有关健康疾病方面的内容请务必咨询专业医生或及时到医院治疗。
关于我们 - 广告服务 - 联系我们
百科问答网 Copyright ©2005 - 2011 www.baikewenda.com,All Rights Reserved
辽ICP备10007180号