1

DataTable にタブ区切りのテキスト ファイルを入力したいと考えています。テキスト ファイルには、次のようなデータが含まれています。

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

テキスト ファイルを DataTable にインポートするために使用OleDBConnectionすると、次のように DataTable でデータを取得しています。

Name_Id_Place
Sam2001USA
Raja3455India
Allan90101Canada

実際のテキスト ファイルには 3 列と 3 行がありますが、DataTable では 3 列すべてを 1 つの列として取得しました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

ここで、テキストファイルからデータを正しい方法で読み取っていると思います。唯一の問題は、使用されているプロバイダーが列の終わりを理解できないため、すべての行を 1 つの列として読み取る理由です。

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 に答える