2013-07-02 49 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

您可以創建一個字符串字典,其中第一個字符串引用「屬性」名稱,第二個字符串引用它的特徵。

相關問題