2013-07-02 48 views
1

我正在处理以制表符分隔的文本文件的导入程序。每个文件的第一行包含像ItemCode,Language,ImportMode等'列',可以有不同数量的列。有没有办法在.NET 3.5中运行时动态创建一个对象?

我可以得到每列的名称,无论是1还是10等等。我用的方法来实现这个返回List<string>

private List<string> GetColumnNames(string saveLocation, int numColumns) 
{ 
    var data = (File.ReadAllLines(saveLocation)); 
    var columnNames = new List<string>(); 
    for (int i = 0; i < numColumns; i++) 
    { 
     var cols = from lines in data 
     .Take(1) 
     .Where(l => !string.IsNullOrEmpty(l)) 
     .Select(l => l.Split(delimiter.ToCharArray(), StringSplitOptions.None)) 
     .Select(value => string.Join(" ", value)) 
       let split = lines.Split(' ') 
       select new 
       { 
        Temp = split[i].Trim() 
       }; 

     foreach (var x in cols) 
     { 
      columnNames.Add(x.Temp); 
     } 
    } 
    return columnNames; 
} 

如果我一直都知道哪些列在期待,我可以创建新的对象,但因为我不这样做,我不知道有没有我可以动态创建一个对象,其属性对应于GetColumnNames()返回的任何内容吗?
有什么建议吗?

+2

我相信[datatable](http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx)是针对这种情况。 –

+0

谢谢,将进行调查。 – MattSull

+1

查看http://www.dotnetperls.com/datatable更多示例 –

回答

1

为了什么是值得的,这里是我如何使用DataTables来实现我想要的。

// saveLocation is file location 
// numColumns comes from another method that gets number of columns in file 
var columnNames = GetColumnNames(saveLocation, numColumns); 

var table = new DataTable(); 
foreach (var header in columnNames) 
{ 
    table.Columns.Add(header); 
} 

// itemAttributeData is the file split into lines 
foreach (var row in itemAttributeData) 
{ 
    table.Rows.Add(row); 
} 

虽然有涉及到能够操纵在我想要的方式将数据多做一些工作,KARTHIK的建议让我在正确的轨道上。

0

您可以创建一个字符串字典,其中第一个字符串引用“属性”名称,第二个字符串引用它的特征。

相关问题