【翻译】读取文本文件(txt、csv、log、tab、fixed length)(下)

其他文件格式

我们讨论了读取逗号分隔的文件(CSV)的方法。那么如何来实现处理制表符分隔文件和定长文件?

主要在于我们提供的连接字符串。让我们来看下连接字符串的细节。

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\FolderName;
Extended Properties="text;HDR=YES;FMT=Delimited

Provider - 表示数据库的类型。我们使用OLEDB连接类型。

Data Source - 文件夹被当做数据库。

Extended Properties - 定义读取文件方式的属性集合。

第一部分定义了文件类型。在我们的案例中,虽然文件格式分类为逗号分隔文件、制表符文件,或者定长文件,但是它们都是文本文件。如果我们要读取一个Excel文件,我们要是使用Excel x.x ,x.x是版本号。

HDR(Header) - 用来指定表头是否可用。YES - 输入文件的第一行被当做表头其他行被当做数据。NO - 第一行被当做数据。

FMT(Format) - 指定格式化类型。可以有如下值:

Delimited 文件被当做一个逗号分隔文件。逗号是默认分隔符。
Delimited(x) 文件被当做 'x’作为分隔符的文件
TabDelimited 文件被当做制表符分隔的文件
FixedLength 通过指定字段的固定长度来读取数据。你要使用属性集合(例如Col1,Col2)来指定列的宽度和类型。更多MSDN

 

如果格式化类型指定为’Delimited’,默认字符时逗号(,)。这存储在注册表中。你在注册表位置HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text\Format进行修改

正如人们所说,不要搞乱注册表。微软提供了一种替代方法-通过使用Schema.ini文件。如果我们要读取一个定长(FixedLength)文件,我们必须使用Schema.ini文件。我们在schema文件中指定字段的长度。

 

从多个文件读取

如果你有多个文件和数据需要基于共同的列做合并或者过滤,我们使用和数据库操作相同的方式。我们可以join表来获取合并数据。记住输出结果将是两个文件列做CROSS JOIN。确保你基于共同的列来过滤数据。

例子:

Examples:

SampleFile1.CSV – (EmpID, Name, Address)
SampleFile2.CSV – (EmpID, Salary, Month)

//Where clause is used to get ‘Natural Join’ string mySelectQuery = "SELECT * FROM SampleFile.CSV As Sample1, _ SampleFile2.CSV As Sample2 " + _ "Where Sample1.Number=Sample2.Number"; 'Where clause is used to get ‘Natural Join’ objRecordset.Open "SELECT * FROM SampleFile.CSV As Sample1, _ SampleFile2.CSV As Sample2 " & _ "Where Sample1.Number=Sample2.Number", _ objConnection, adOpenStatic, adLockOptimistic, adCmdText

注意别名在join查询中是必须的,特别是在表具有相同名称的列。在我们的案例中,表名(文件名)中有点(.)。所以查询分析器将被表中的点误导,可能把’CSV.Number’当做列名

posted on 2010-04-11 18:39  齐世昌  阅读(3259)  评论(0编辑  收藏  举报