2

テキスト ファイルからデータを読み取ってデータセットに読み込もうとしていますが、下の画像のようにさまざまな列が 1 つの長い列として表示されます。データを7列として返したい(下の画像に表示されているのと同じ方法で)。

これは使用しているコードです。

public DataSet LoadTxtFile(int numberOfRows)
    {
        DataSet ds = new DataSet();
        //try
        //{
            // Creates and opens an ODBC connection
            string strConnString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + this.dirCSV.Trim() + ";Extensions=asc,csv,tab,txt;Persist Security Info=False";
            string sql_select;
            OdbcConnection conn;
            conn = new OdbcConnection(strConnString.Trim());
            conn.Open();

            //Creates the select command text
            if (numberOfRows == -1)
            {
                sql_select = "select * from [" + this.FileNevCSV.Trim() + "]";
            }
            else
            {
                sql_select = "select top " + numberOfRows + " * from [" + this.FileNevCSV.Trim() + "]";
            }

            //Creates the data adapter
            OdbcDataAdapter obj_oledb_da = new OdbcDataAdapter(sql_select, conn);

            //Fills dataset with the records from CSV file
            obj_oledb_da.Fill(ds, "csv");

            //closes the connection
            conn.Close();
        //}
        //catch (Exception e) //Error
        //{
            //MessageBox.Show(e.Message, "Error - LoadCSV",MessageBoxButtons.OK,MessageBoxIcon.Error);
        //}
        return ds;
    }

テキスト ファイルのサンプル データ

4

1 に答える 1

3

私は通常、簡単な解決策を採用します。つまり、ファイルにアクセスし、すべての行を読み取り、ループで行の文字列を分割し、新しいデータ行を作成して入力し、最後にデータ行をデータテーブルに追加します。

string[] records = File.ReadAllLines(path);
foreach(string record in records)
{
  DataRow r = myDataTable.NewRow();
  string[] fields = record.Split('\t');
  /* Parse each field into the corresponding r column
   * ....
   */
  myDataTable.rows.Add(r);
}

また、OleDb 接続を使用して CSV ファイルにアクセスする方法と、スキーマ情報ファイルに関する解決策も見つけました。私はこのアプローチを使用したことがありません。

参考文献:

于 2012-07-16T08:10:08.593 に答える