其他文件格式
我们讨论了读取逗号分隔的文件(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’当做列名