4

テキスト ファイル [タブ区切り] を読み取り、データ テーブルを返すこのコード ブロックがあります。しかし、問題は、ファイルまたはレコードの最初の行をヘッダーとして扱い、残りの行をレコードとして表示し、レコードの数を-1で減算することです。そのため、コードでファイルのすべてのコンテンツをレコードとして読み取る必要があります.

コードは次のとおりです。

streamReader reader = new streamReader (filePath);
string line = reader.readLine();
Datatable dt = new Datatable ();
DataRow row;
string[] value = line.Split('\t');

foreach(string dc in value)
{
 dt.columns.add(New DataColumn(dc));
}

while(!reader.endofStream)
 {
  value = reader.ReadLine().split('\t');

  if (value.Length == dt.Columns.Count)
 {
  row = dt.NewRow();
  row.ItemArray = value;
  dt.Rows.Add(row);
 }

 }

 return dt;

取り除こうとすると

foreach(string dc in value)
{
 dt.columns.add(New DataColumn(dc));
}

それに依存するすべての行コード、dtは何も返しません。

どうすれば解決できますか?

4

2 に答える 2

5

ヘッダーがないことを知っている場合は、列の名前も知らないと思いますよね? 次に、代わりに「匿名」列を追加する必要があります。

DataTable dt = new DataTable();
while (reader.Peek() >= 0)
{
    string line = reader.ReadLine();
    string[] fields = line.Split('\t');
    if (dt.Columns.Count == 0)
    {
        foreach (string field in fields)
        {
            // will add default names like "Column1", "Column2", and so on
            dt.Columns.Add(); 
        }
    }
    dt.Rows.Add(fields);
}
于 2012-11-19T09:22:30.320 に答える
3
DataTable dt = new DataTable();
var lines = File.ReadAllLines(strPath).ToList();
dt.Columns.AddRange(lines.First().Split(new char[] { '\t' }).Select(col => new DataColumn(col)).ToArray());
lines.RemoveAt(0);
lines.Select(x => x.Split(new char[] { '\t' })).ToList().ForEach(row => dt.Rows.Add(row));

これをテストデータに使用します

List<string> lines = new List<string>();
lines.Add("Col1\tCol2\tCol3");
lines.Add("aaa\tbbb\tccc");
于 2012-11-19T09:25:18.817 に答える