用VB处理定长文本的导入

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情


用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

这是我能够想到的解决方法,希望有好方法的朋友能够指正(40Star@163.com)!

使用API进行文件读写——CreateFile,ReadFile,WriteFile等 原文:simple and easy——API文件读写类http://www.vbgood.com/thread-102870-1-1.html看了这个帖子: http://www.vbgood.com/thread-99249-1-1.html 就写了一个使用API读写文件的简单类,苦力活。 演示代码在附件里。 '*********************************** 'Written by D.L. ' '2011/04/04 '********************* 阅读详情

相关推荐

VB字符串处理函数大全与实战应用

每个函数都有明确的参数签名和返回类型,理解这些是正确使用的第一步。函数名参数列表返回值类型功能说明string: 字符串表达式;length: 整数String返回左边起指定长度的字符string: 字符串表达式;length: 整数String返回右边起指定长度的字符string: 字符串;start: 起始位置(从1开始);length(可选): 截取长度String从指定位置开始截取字符。

weixin_42126677的博客 1245

VB 超长文本换行打印

VB 超长文本换行打印 VB 超长文本换行打印 VB 超长文本换行打印

使用CreateFile,ReadFile,WriteFile等API读写文件的简单类

simple and easy——API文件读写类 http://blog.csdn.net/dahual/archive/2011/04/16/6327998.aspx

readFile()函数判断文件是否读取完成

LPOVERLAPPED lpOverlapped OVERLAPPED结构体指针,如果文件是以FILE_FLAG_OVERLAPPED方式打开的话,那么这个指针就不能为NULL。如果文件打开方式没有指明FILE_FLAG_OVERLAPPED的话,当程序调用成功时,它将实际读出文件的字节数保存到lpNumberOfBytesRead指明的地址空间中。HANDLE hFile, 需要写入数据的文件指针,这个指针指向的文件必须是GENERIC_READaccess 访问属性的文件。调用不成功,返回为0。

winkexin的博客 481

VB6.0实现修改EXE程序的图标

当你给一家公司做技术支持的时候,需求各种各样的,其中今天遇到就是要修改某个程序的图标,代码实现如下。'//注 意:这个方法貌似只对有些EXE文件有效,这不是万能的方法,此方法只能做为参考所用。'//参 数:IconFile 图标文件 ExeFile 被修改的EXE文件。'// q1016058890 群 214016721。'//返 回 值: 成功为True,否则False。MsgBox "成功"MsgBox "失败"'//函数说明:修改EXE图标。

追逐光芒,追随内心 1713

VB操作EXCEL

<br />一.设置excel对象,strDestPath是EXCEL数据源位置。<br />Private Function prepareExcel(ByVal strDestPath As String)<br />   Set exlApp = CreateObject("Excel.Application")<br />   Set book = exlApp.Workbooks.Open(strDestPath)<br />End Function<br />二.操作EXCEL中的行列。<br

点点滴滴 1594

VB打开文本文件各种方法

       打开文本文件是不少程序必须处理的问题。如何更有效地打开文本文件应该是一个值得研究的课题。为此,笔者将自己搜集到的几种方法无私地奉献出来(-_-),供各位参考。同时期盼大家也来参与,借VB编程乐园这块宝地互相交流。如您有这份心,土人在这里先说声谢谢!  下面所举的例子均假设F盘下有一个名为d.txt的文本文件,若需要尝试这些例子请作相应的改动。  方法一:    用定长的Strin...

miaozk2006的专栏 1439

C# VB.NET中Tuple轻量级数据结构和固定长度数组

在中,使用Tuple。

1231

VB定长字符串

按照缺省规定,String 变量或参数是一个可变长度的字符串,随着对字符串赋予新数据,它的长度可增可减。 也可以声明字符串具有固定长度。可用以下语法声明一个定长字符串: String * size 例如,为了声明一个长度为 50 字符的字符串,可用下列语句: Dim EmpName As String * 50 如果赋予字符串的字符少于 50 个,则用空格将 EmpName ...

weixin_30810583的博客 1314

vb.net类型转换_将VB6转换为VB.NET

vb.net类型转换1.0 - Introduction1.0-简介 Converting Visual Basic 6.0 (VB6) to Visual Basic 2008+ (VB.NET). 将Visual Basic 6.0(VB6)转换为Visual Basic 2008+(VB.NET)。 If e...

cunchi8090的博客 1043

vb源码 删除文本文件重复行

网上整理的VB脚本为函数,并加入简单的调用 删除文本文件重复行,效率很高,40万行的数据,在我的电脑上只用了40秒 请注意:在输入文件中不能有空行,否则会出错 另外,里边用上了自编获取文件路径名和扩展名函数 发布前专门测试通过,有需要的朋友可以直接引用 另外说明:由于好用才拿出来共享,为什么说测试无误,因为我最近搞的小程序“文本文件合并”就用到了这段代码。有兴趣的朋友可以下载下来看一看。http://download.csdn.net/source/3154937

vbvb.net的比较

Vb.net是Microsoft visual studio.net套件中主要组成部分之一,是vb6.0的后续版本,两者几乎在90%以上保持相似或者相同。但是,.net版本的visualbasic增加了更多的特性,同时也是原来的vb6.0做了很多修改,演化为完全面向对象的编程语言。 Vbvb.net的比较 1、输入和输出 2、基本语言元素 ...

小花生编程 2893

VBVB.net的区别

概述: VB.NET是基于微软.NET Framework之上的面向对象的编程语言。其在调试时是以解释型语言方式运作,而输出为EXE程序是是以编译型语言方式运作。可以看作是VB在.NetFramework平台上的升级版本,增强了对面向对象的支持。 数据类型:

吴晓如 4639

[VBA] 处理中英文对齐的文本

1. 数据源 金字塔导出的持仓文件格式: 序号 品种 均价 今持 总持 市价 浮动盈亏 保证金 风险度 投保 账户 1 ZN02 沪锌1602 12695 1 1 1660 -175.00 712.75 0.0529

fonjames的专栏 1957

VB.NET 数组的定义 动态使用 多维数组

我们都知道在全部程序设计语言中数组都是一个非常重要的概念,数组的作用是同意程序猿用同一个名称来引用多个变量,因此採用数组索引来区分这些变量。非常多情况下利用数组索引来设置一个循环,这样就能够高效地处理复杂的情况,因此在非常多情况下,使用数组能够缩短或者简化程序的代码。本文主要介绍VB.NET数组的使用,希望对大家的使用带来帮助。 数组中的第一个元素的下标称为下界,最后一个元素的下标称为上界,其余的元素...

chinaherolts2008的博客 2826

VB打开文本文件的各种方法

打开文本文件是不少程序必须处理的问题。如何更有效地打开文本文件应该是一个值得研究的课题。为此,笔者将自己搜集到的几种方法无私地奉献出来(-_-),供各位参考。 下面所举的例子均假设F盘下有一个名为d.txt的文本文件,若需要尝试这些例子请作相应的改动。 方法一: 用定长String变量获取文本内容。由于定长String变量支持的下界为65400,所以在打开超过32K字节的文件时超出部分的字节将无

思科网络 4162

VB基础

VB基础 1、VB For循环 基本语法 For counter [ As datatype ] = start To end [ Step step ] [ statements ] [ Continue For ] [ statements ] [ Exit For ] [ statements ] Next [ counter ...

Onwaier的博客 2162
上一篇: 另类Msgbox
下一篇: ADO记录集和水晶报表
40Star
博客等级 码龄25年 1粉丝 32原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值