如何从CSV文件创建二维数组

时间:2019-01-04 00:04:56

标签: c#

我无法从CSV文件数据“ smart eye data.csv”创建二维数组“ smartdata”。我不断收到错误消息,指出“对象引用未设置为对象的实例”。

我知道2个for循环对于创建矩阵的外部和内部尺寸是必需的,但是仍然没有做到这一点。 CSV数据只是数字电子表格。任何帮助将不胜感激。谢谢

using (StreamReader oStreamReader = new StreamReader(File.OpenRead("Smart Eye data.csv")))
    {
        sFileContents = oStreamReader.ReadToEnd();
    }

    string[][] smartdata = new string[1000][]; 

    string[] sFileLines = sFileContents.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

    int i = 0;

    foreach(string sFileline in sFileLines)
    {
        string[] rowarray = sFileline.Split(",".ToCharArray(),StringSplitOptions.RemoveEmptyEntries);


        for (int j = 0; j < rowarray.Length; j++)
        {

            smartdata[i][j] =rowarray[j]; //where the error occurs
            //Debug.Log(smartdata[i][j]);

                }
        i = i + 1 ;
    }

3 个答案:

答案 0 :(得分:0)

如果您坚持使用2d数组(我不会),则只需要(并坚持不使用csvhelper)

   foreach(string sFileline in sFileLines)
    {

 smartdata[i] = sFileline.Split(",".ToCharArray(),StringSplitOptions.RemoveEmptyEntries);
}

如果您想用困难的方式做,那就做

    for (int j = 0; j < rowarray.Length; j++)
    {
        smartdata[i] = new string[rowarray.Length];
        smartdata[i][j] =rowarray[j]; //where the error occurs
        //Debug.Log(smartdata[i][j]);

            }
    i = i + 1 ;

现在您可以看到我的原始评论的意思。我有一个锯齿状的数组(您有什么),您必须分配每一行。

答案 1 :(得分:0)

pm100给了您 real 问题:您没有分配内部数组;因此是错误。

使用CSV库并不是一个坏主意-但这当然不是必需的。

使用列表(而不是数组)的好处是您不需要事先知道#/行或#/列。

这是一个例子:

List<List<string>> mylist = new List<List<string>>();
using (StreamReader sr = new StreamReader(File.OpenRead("Smart Eye data.csv")))
{
   string line;
   while((line = sr.ReadLine()) != null)  
   {  
      System.Console.WriteLine(line);  
      List<string>row = line.Split(",").ToList();
      mylist.Add(row);
   }
}
...

答案 2 :(得分:0)

您应该初始化2d数组的子数组:

foreach(string sFileline in sFileLines)
{
  string[] rowarray = sFileline.Split(",".ToCharArray(),StringSplitOptions.RemoveEmptyEntries);

    smartdata[i]=new string[rowarray.Length];
    for (int j = 0; j < rowarray.Length; j++)
    {

        smartdata[i][j] =rowarray[j]; //where the error occurs
        //Debug.Log(smartdata[i][j]);

    }
    i = i + 1 ;
}