用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