您当前所在的位置: 首页 > 资格等级 > 计算机等级 > 正文
NCRE考试:用VB处理定长文本的导入
发布日期:2012-06-11 08:46:00 来源:考试吧

  用VB编写将带分割符的文本导入数据库可能是最经常用到的方式,但是导入定长的文本就不是像前者那样简单了(个人观点)。因为这里需要处理一个技术问题,就是在VB中所有的字符都是按照Unicode进行运算的,所以一个字节的英文字符、数字和两个字节的汉字在VB中都是两个字节。那么在我将一行文本ReadLine读到一个字符串中后,如果从某位至某位是单双字节混合的字符串,那就没有办法用Mid、Left这类函数确定这个串的长度。因此一直没有找到好的方法处理,让我郁闷了久久。

  最后我只能使用API来处理,调用了CopyMemory进行字符串Copy,因为这个函数是可以按字节操作的。在使用中感觉效果还是可以的,下面我就将这个API又包了一层函数。

  ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘Api声明‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘

  Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)

  ‘按字节返回字符串的函数

  Private Function GetByteString(ByVal strInput As String, ByVal intLen As Integer) As String

  Dim strRtn As String

  strRtn = Space$(intLen)

  Call CopyMemory(ByVal strRtn, ByVal strInput, intLen)

  GetByteString = strRtn

  End Function

  ‘以下是读取文件和拆分字符串的处理

  Dim fsoReadFile As FileSystemObject ‘FSO Object

  Dim flFile As File ‘File Object

  Dim tsTxt As TextStream

  ‘打开文本文件

  Set fsoReadFile = New FileSystemObject

  Set flFile = fsoReadFile.GetFile(strFileName)

  Set tsTxt = flFile.OpenAsTextStream(ForReading)

  Do While Not tsTxt.AtEndOfStream

  strTMP = tsTxt.ReadLine

  ‘读取前十个字节的字符

  strInsert(0) = GetByteString(strTMP, 10)

  ‘将原字符串缩短

  strTMP = Right(strTMP, Len(strTMP) - Len(strInsert(0)))

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ‘分别按长度截取,以此类推

  Loop

  tsTxt.Close

  Set fsoReadFile = Nothing

NCRE考试:用VB处理定长文本的导入
字体: A+ A A-