1

我想用制表符分隔的文本文件填充 DataTable。文本文件包含如下数据:

Name   Id   Place
Sam    2001   USA
Raja    3455   India
Allan    90101   Canada

当我使用OleDBConnection将文本文件导入 DataTable 时,我在 DataTable 中获取数据如下:

Name_Id_Place
Sam2001USA
Raja3455India
Allan90101Canada

实际的文本文件有 3 列和 3 行,但在 DataTable 中,我将所有 3 列作为一个列Name_Id_Place

谁能告诉我这个问题的解决方案?

4

2 回答 2

4
    static void Main()
    {
        //create a data table and add the column's
        DataTable table = new DataTable("table_name");
        table.Columns.Add("name", typeof (String));
        table.Columns.Add("id", typeof (Int32));
        table.Columns.Add("place", typeof (String));

        //start reading the textfile
        StreamReader reader = new StreamReader("file_to_read");
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            string[] items = line.Split('\t');
            //make sure it has 3 items
            if (items.Length == 3)
            {
                DataRow row = table.NewRow();
                row["name"] = items[0];
                row["id"] = Int32.Parse(items[1]);
                row["place"] = items[2];
                table.Rows.Add(row);
            }
        }
        reader.Close();
        reader.Dispose();

        // make use of the table


        // when use is done dispose it
        table.Dispose();
    }
于 2013-01-11T17:56:16.680 回答
0

在这里,我认为您以正确的方式从文本文件中读取数据,唯一的问题是我看到您使用的 Provider 无法理解列的结尾,那为什么将所有行读为一列

尝试使用 OleDBConnection 从文本文件中读取数据时,我得到了完全相同的结果。

在我作为提供者的连接字符串中,我使用了:

Provider=Microsoft.Jet.OLEDB.4.0;

如果您使用相同,则只需在 Windows 注册表中更改此提供程序的“格式”选项:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Text 

然后将“Format”键修改为value="TabDelimited"

或者如果您想使用其他分隔符(例如“;”)然后 Format = “Delimited(;)”

于 2013-01-12T15:48:55.210 回答