从文本文件中填充数据表

时间:2012-11-19 09:11:22

标签: c# file datatable

我有这段代码,它读取文本文件[Tab delimited]并返回一个数据表。但问题是它将文件或记录的第一行视为标题,并将剩余的行显示为记录,减去记录的数量 - 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什么都不返回。

我该如何解决?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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");