2013-11-05 30 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)行把数据(在同一列),以相同的列表