【问题标题】:Separating a CSV file contents into an array将 CSV 文件内容分离到数组中
【发布时间】:2013-11-05 03:23:55
【问题描述】:

我的 CSV 文件格式如下

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

等等

我需要 3 个单独的数组吗? (我认为这是最好的方法。)一个用于对象,然后我可以将其输入到我的图表中。一个用于值和属性。我对数组还不太了解。

【问题讨论】:

    标签: c# arrays string csv


    【解决方案1】:

    您应该创建自己的包含ObjectValueAttribute 的类并将其存储在一个列表中。

    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]
       });
      }
     }
    }
    

    【讨论】:

    • String.Split 可能不是最好的答案;如果任何列包含不是分隔符的逗号,则效果不佳。
    • 逗号作为值的一部分在 CSV 文件中始终是一个棘手的情况,确实应该得到适当的处理。不过,这超出了这个问题的范围。您已经为此提供了一个很好的链接,因此如果遇到此问题,OP 应该查看那里。
    【解决方案2】:

    我推荐一个包含对象、值和属性的类的数组,因为这样您就不必担心丢失数据的复杂性,也不必担心添加更多列时会更改所有数组。

    【讨论】:

      【解决方案3】:

      您如何处理这些字段取决于您将如何使用这些数据。您可能需要一个结构或对象数组,其中数组中的每个元素都是一行,对象/结构的每个成员都是一列。

      这是一个非常简单的结构示例,您可以在其中保存数据:

      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();
      }
      

      请注意模棱两可的函数“SplitLine”。有很多方法可以拆分字符串。查看here 了解将字符串拆分为字段的最佳方法。

      【讨论】:

        【解决方案4】:

        这真的取决于你想对数据做什么。您似乎想按类别绘制数据图表。如果是这种情况,那么最简单的方法是将每个列放在同一个列表中。

        1) 读取 csv 文件,每行 2)根据逗号分割行 3)将数据(在同一列)放到同一个列表中

        【讨论】:

          猜你喜欢
          • 2021-09-06
          • 1970-01-01
          • 2016-02-23
          • 1970-01-01
          • 2014-06-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多