【免费下载】CSV文件操作

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VB6.0 CSV文件操作2008-05-27 18:04

功能:读取CSV文件的内容并导入到数据库中

环境:Access2003 语言:VBA(对于使用VB6.0同样适用)

数据库:D:\db1.mdb

数据表:test

userId 数值型

userName 文本型

CSV文件:D:\test.csv (使用Excel打开)

编号姓名

123 王五

456 李"“四

789 张'三

注意,在实际处理CSV文件前,程序开发者必须了解CSV文件的真实结构。

为了说明在处理CSV文件时可能遇到的特殊情况,用于测试的CSV文件的

最后两行的“姓名”列均插入了特殊字符。

由于在显示CSV文件内容时,Excel已经对CSV文件进行了处理,因此,

上面使用Excel所看到的内容并不是CSV的真实内容。

如果使用文本编辑器打开,可以看到真实的内容为:

----------

编号, 姓名

123, 王五

456, "李""“四"

789, 张'三

----------

之所以出现这样的内容,是因为我们通常使用Excel编辑CSV文件,然后

使用另存为命令保存为CSV文件。这一过程中,Excel会隐蔽地进行如下处理:1

CSV文件将Excel的同一行中不同单元格的内容使用,(半角逗号分隔开)

2 当内容中出现半角双引号时会自动被转义为两个双引号,即"";

同时内容整体的两端自动被双引号引起来。例如:李"“四-> "李""“四"

了解了数据表和CSV文件的结构,下面就可以编写代码了。

------------------------------------------------------------

1. Option Compare Binary 声明

作用:声明当前VB环境中字符串的比较方式

这里的Binary 声明当前VB环境中的字符串依照其在内存中的字节码来进行比较

如果你使用的是普通VB6.0环境,默认的字符串比较就是依照字节码比较

但是,如果你使用的是Access VBA进行开发,就要特别注意了。

Access VBA开发时会在全部代码之前默认追加声明:Option Compare Database

也就是说,Access VBA默认依照Access数据库中存储的比较规则进行字符串比较

所以,普通VB6.0开发环境与Access VBA开发环境的默认字符串比较方式不同。

VB6.0的默认字符串比较方式是Binary,

Access VBA的默认字符串比较方式是Database。

注意:Database比较方式对全角和半角不敏感。例如,“,”,与" 在Database方式下将被视为相等

所以,如果你的程序使用Access VBA开发,同时又要进行全角与半角的比较时

应当使用Binary比较方式,而不是接受Access VBA的默认设置,即你的程序的首行必须是:Option Compare Binary

2.全部代码如下:

'声明当前VB环境中字符串的比较方式为字节码

Option Compare Binary

'要测试本例的文件操作,就新建一个窗体,在上面添加一个名为“cmdImport”的按钮,

'单击后即执行下面的方法,完成文件读取和写入数据库的操作

'函数开始--------------------------------------------------

'主函数,执行的开始

Private Sub cmdImport_Click()

Dim cn As New ADODB.Connection

'指定连接字符串,本例连接到D:\db1.mdb 数据库

cn.ConnectionString = _

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\db1.mdb"

'开启连接,准备对数据库操作

cn.Open

'定义存储文件名的对象

Dim fileName As String

'指定要读取的CSV文件的名称本例为D:\test.csv

fileName = "D:\test.csv"

'执行ImportFile函数,完成以下操作:

'1 读取D:\test.csv 文件的内容

'2 将读取的文件内容写入D:\db1.mdb 数据库的test 表中

ImportFile cn, "test", fileName

'完成操作后关闭连接

cn.Close

'将连接设置为Nothing ,及时释放其所占用的内存空间

Set cn = Nothing

End Sub

'函数结束--------------------------------------------------

'函数开始--------------------------------------------------

'参数------------------------------------------------------------------

'1. cn 使用的数据库联接,本例连接到D:\db1.mdb

'2. tblName 使用的数据库表名称,本例为test

'3. FileFullPath 读取的CSV文件目录(包括文件名),本例为D:\test.csv

'4. FieldDelimiter 指定CSV文件同一行内容以哪种字符分隔默认为,(半角逗号)'5. RecordDelimiter 指定CSV文件不同行内容以哪种字符分隔默认为vbCrLf(回车换行符)

'参数------------------------------------------------------------------

Public Sub ImportFile(cn As Object, _

ByVal tblName As String, FileFullPath As String, _

Optional FieldDelimiter As String = ",", _

Optional RecordDelimiter As String = vbCrLf)

Dim cmd As New mand

Dim rs As New ADODB.Recordset

Dim iFileNum As Integer

Dim sFileContents As String

Dim sTableSplit() As String

Dim sRecordSplit() As String

Dim lCtr As Integer

Dim iCtr As Integer

Dim lRecordCount As Long

Dim iFieldsToImport As Integer

Dim asFieldNames() As String

Dim abFieldIsString() As Boolean

Dim iFieldCount As Integer

Dim sSQL As String

'判断传入的cn参数是否是数据库连接对象,如果不是,退出程序

If Not TypeOf cn Is ADODB.Connection Then Exit Sub

'判断指定目录下的CSV文件是否真实存在,如果不是,退出程序

If Dir(FileFullPath) = "" Then Exit Sub

'判断数据库联接是否已打开,如果没有则打开连接

If cn.State = 0 Then cn.Open

相关文档
最新文档