2013-11-05 29 views
0

我的CSV文件被格式化這樣分離CSV文件內容到一個數組

Object,Value,Attribute 
Object,Value,Attribute 
Object,Value,Attribute 

我會需要3個獨立的數組? (我認爲這是做這件事的最好方式。)一個用於對象,然後我可以將它放入我的圖表中,一個用於值和屬性。我對數組還不是很瞭解。

回答

0

我推薦一個包含對象,值和屬性的類的數組,因爲這樣您就不必擔心丟失數據的複雜性,並且如果添加更多列,則更改所有數組。

1

您應該創建自己的類,其中包含Object,ValueAttribute並將其存儲在列表中。

class SomeClass { 
public string MyObject { get; set; } 
public string MyValue { get; set; } 
public string MyAttribute { get; set; } 
} 

private List<SomeClass> myList = new List<SomeClass>(); 

public void ReadCsv(){ 
using (var sr = new StreamReader("PathToCsvFile")) { 
    string currentLine; 

    while ((currentLine = sr.ReadLine()) != null) { 
    var elements = currentLine.Split(','); 

    myList.add(new SomeClass { 
    MyObject = elements[0], 
    MyValue = elements[1], 
    MyAttribute = elements[2] 
    }); 
    } 
} 
} 
+0

String.Split可能不是最好的答案;如果任何列包含不是分隔符的逗號,則效果不佳。 –

+0

逗號作爲值的一部分在CSV文件中始終是一個棘手的情況,應該進行適當的處​​理。這超出了這個問題的範圍。你已經提供了一個很好的鏈接,所以如果他遇到這個問題,OP應該看看那裏。 –

0

你對字段的處理取決於你將如何使用數據。您可能需要一個數組結構或對象,其中數組中的每個元素都是一行,並且對象/結構的每個成員都是一列。

這裏有一個結構,在那裏你可以把你的數據的一個很簡單的例子:

struct MyStruct 
{ 
    string Column1; 
    string Column2; 
    //etc 
} 

下面是一些代碼從文件中填充它:

List<MyStruct> rows = new List<MyStruct>; 

s = reader.ReadLine(); 
while (s != null) 
{ 
    string s[] columns = SplitLine(s); 
    MyStruct row = new MyStruct(); 
    row.Column1 = s[0]; 
    row.Column2 = s[1]; 
    rows.Add(row); 
    s = reader.ReadLine(); 
} 

通知曖昧功能「分裂線「。很多方法來分割字符串。查看here以將字符串拆分爲字段的最佳方法。

0

這實際上取決於你想要對數據做什麼。看來你想要繪製每個類別的數據。如果是這種情況,那麼最簡單的方法是將每個列放在同一個列表中。

1)讀出的CSV文件,每行 2)分裂基於逗號 3)行把數據(在同一列),以相同的列表