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

说明

  原文链接:http://www.codeproject.com/KB/database/ReadTextFile.aspx?display=Print

我们偶尔碰到一些我们需要从文本文件(.txt,.csv,.tab)读取数据和处理数据的情况。最常用的方式就是使用StreamReader(.NET)逐行读取文件。

假设我们能把文件作为数据库读取,使用查表的方式处理数据,我们会发现上述方法会有很多的不足:

1.连接环境。锁定文件直到处理过程完成。

2.我们需要拆分每行来得到独立列的数据。处理那些有逗号(,)作为部分数据的行是困难的。

例如:“Yes,comma is here”,2,”Hello, another comma”,4,5,6

3.我们不能使用条件来过滤数据直到我们读取行和开始处理。

4.计算文件中的记录数或者计算一个特定类型的记录数需要读取整个文件。

我们可以列出如此多的不足。使用数据表查询的所有好处可以弥补逐行读取的不足。

现在,我们能把文本文件作为数据库表读取吗?

我们就不需要讨论这个主题了,如果答案是NO。当然,我们可以把文件作为数据表读取并且我们将轻松克服上面提到的所有的不足。

读取数据

如同连接到数据库,从数据表查询数据一样简单。在这个例子中,我们认为文件文件为表,包含文件的文件夹为数据库。

读取数据的步骤如下:

1.打开数据库连接

注意:这里连接字符串是很重要的。依赖我们要读取文件的类型不同而改变。我们将随后在这篇文章中讨论。

2. 使用基本查询语言获取结果

3.循环结果,读取字段。

代码
DataSet myData = new DataSet();
string myXML;
string strFilePath = "C:\\";
string mySelectQuery = "SELECT * FROM SampleFile.CSV";
OleDbConnection myConnection 
= new OleDbConnection
        (
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\;" + 
                   
"Extended Properties=\"text;HDR=YES;FMT=Delimited\"");
OleDbDataAdapter dsCmd 
= new OleDbDataAdapter(mySelectQuery, myConnection);
//Fill the DataSet object
dsCmd.Fill(myData, "CustomerOwners");
//Create a XML document with the table data
myData.WriteXml("D:\\TestXML.xml");
myConnection.Close();

我们把文本文件作为数据库来读取并上传到数据库。让我们来看看这中方法的好处:

1.处理过程很快。

2.第一件我们需要注意的事就是处理数据行和拆分数据的方式。假如你在其中一行中有一段有逗号(,)作为部分的文本(上面列出的第二点不足处),过程中自动处理这种情况。我们不需要单独处理。

3.我们可以从文件中选择指定的行集,如果给出查询标准

例如:"SELECT * FROM SampleFile1.CSV WHERE Number >= 3”

4.此时,很容易明白我们还可以在查询中使用非常有帮助的WHERE,Having 或者GROUP By 语句。

5.一旦我们读取了文件中的所有数据,我们就可以根据需要过滤数据。这可以通过使用RowFilter属性或者DataView。正如我所说,一旦我们把数据读取到DataSet,我们可以做所有能做的操作了。这包括过滤,排序等。

原文地址:https://www.cnblogs.com/qishichang/p/1700062.html