2011-12-05 229 views
1

我已将从文本文件检索到的值存储到数组中。现在我试图用下面的代码将这些数组值存储到数据表中。将数组存储到数据表中

问题是,如果第一行有20个值,第二行有23个值,则在最后20(第一行列数)为空的数据表中创建43个单元格。这继续为每一行。有没有其他方式将数组存储到数据表中?

var reader = new StreamReader(File.OpenRead(@"d:\er.txt")); 
var table = new DataTable("SampleTable"); 

while (!reader.EndOfStream) 
{ 
    var line = reader.ReadLine().Trim(); 
    var values = line.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); 
    string[] ee = values; 
    var newRow = table.NewRow(); 
    for (int i = 0; i < ee.Length; i++) 
    { 
     table.Columns.Add(); 
     newRow[i] = ee[i].Trim().ToString(); // like sample [0,0] 
    } 
    table.Rows.Add(newRow); 
} 
+0

表格本质上是矩形的;你想在这里做什么? “成功”会是什么样子? –

+0

显示你的输出表结构来清除你想要做什么..你无法像你期望的那样去处理DataTable。 –

+0

该文件是分隔的,请考虑使用FileHelpers.Net直接访问数据表 - 它将消除您必须执行的任何解析。有关一种用法,请参阅http://stackoverflow.com/questions/1898/csv-file-imports-in-net。你可以使用任何你想要的分隔符,而不只是一个逗号。 – dash

回答

2

这是因为您要为添加到表格的每个值添加一列。如果需要,您只需添加另一列。类似下面的东西应该就足够了:

var reader = new StreamReader(File.OpenRead(@"d:\er.txt")); 
var table = new DataTable("SampleTable"); 
int columnCount = 0; 
while (!reader.EndOfStream) 
{ 
    var line = reader.ReadLine().Trim(); 
    var values = line.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); 
    string[] ee = values; 
    while (columnCount < ee.Length) 
    { 
    // Only add a new column if it's required. 
    table.Columns.Add(); 
    columnCount++; 
    } 
    var newRow = table.NewRow(); 
    for (int i = 0; i < ee.Length; i++) 
    { 
     newRow[i] = ee[i].Trim().ToString(); // like sample [0,0] 
    } 
    table.Rows.Add(newRow); 
} 
+0

谢谢你man u说得对 – Karthik

相关问题