Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#类从csv读取数据并返回数组_C#_Arrays_Csv - Fatal编程技术网

c#类从csv读取数据并返回数组

c#类从csv读取数据并返回数组,c#,arrays,csv,C#,Arrays,Csv,我正在编写一个类,其中包含一个方法,该方法在从文件读取后应该返回一个数组,但它总是返回一个空数组。当我只在主文件中调用不带类的方法时,一切正常 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ProjectX { class ReadFile { privat

我正在编写一个类,其中包含一个方法,该方法在从文件读取后应该返回一个数组,但它总是返回一个空数组。当我只在主文件中调用不带类的方法时,一切正常

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProjectX
{
    class ReadFile
    {

        private System.IO.StreamReader file;

        public ReadFile()
        {         
            file = new System.IO.StreamReader(@"E:\\XXXX.csv"); 

        }

        private int DataLenght()
        {

            String line = String.Empty;         
            int lenght = 0;
            line = string.Empty;

            while ((line = file.ReadLine()) != null)
            {
                lenght++;

            }
            return lenght;

        }

          public double[] ReadFromFile()
        {
            double[] arr;
            String line = String.Empty;
            double[] data = new double[DataLenght()];
            string[] dataString = new string[DataLenght()];
            List<double> listaDouble = new List<double>();


            int x = 0;
            String[] parts_of_line;
            while ((line = file.ReadLine()) != null)
            {

                parts_of_line = line.Split(',');

                for (int i = 0; i < parts_of_line.Length; i++)
                {
                    parts_of_line[i] = parts_of_line[i].Trim();
                    data[i] = double.Parse(dataString[i]);              
                    listaDouble.Add(data[i]);

                }

            }
            arr = listaDouble.ToArray();

            return arr;
        }

    }
}

很抱歉ReadFromFile方法中出现了一些不需要的转换,但请尝试一些方法使其正常工作。

您遇到了一些问题。因为你的问题是在回答这个问题的时候,你的问题是你已经阅读了这条流,正如安德烈·鲁迪克所指出的,现在已经到了结尾。在每次尝试阅读之前,您必须将其设置回开头:

file.BaseStream.Position = 0;
然而,在那之后,你有更多的问题。您的整个类都可以重构成这样,仔细阅读并理解发生了什么:

class ReadFile
{
    public double[] ReadFromFile()
    {
        List<double> listaDouble = new List<double>();

        using(var file = new System.IO.StreamReader(@"E:\XXXX.csv"))
        {
            string line = "";
            while ((line = file.ReadLine()) != null)
            {
                string[] linetokens = line.Split(',');

                listaDouble.AddRange(linetokens.Select (l => double.Parse(l)));
            }
        }
        return listaDouble.ToArray();
    }
}
类读取文件
{
public double[]ReadFromFile()
{
List listaDouble=新列表();
使用(var file=new System.IO.StreamReader(@“E:\XXXX.csv”))
{
字符串行=”;
而((line=file.ReadLine())!=null)
{
string[]linetokens=line.Split(',');
AddRange(linetokens.Select(l=>double.Parse(l));
}
}
返回listaDouble.ToArray();
}
}
注意,这假设您的行标记总是解析为double,这是一个容易出错的假设


double[]arr=read.ReadFromFile();你从不在dataString.while(((line=file.ReadLine())!=null)中放入任何内容。看起来像是有人在做家庭作业。@Crowcoder我更正了它并添加了();并且在data[i]=double.Parse(dataString[i])中使用了行[i]的部分而不是空的dataString[i];但它仍然是相同的,我认为,你应该将流设置为开始。
class ReadFile
{
    public double[] ReadFromFile()
    {
        List<double> listaDouble = new List<double>();

        using(var file = new System.IO.StreamReader(@"E:\XXXX.csv"))
        {
            string line = "";
            while ((line = file.ReadLine()) != null)
            {
                string[] linetokens = line.Split(',');

                listaDouble.AddRange(linetokens.Select (l => double.Parse(l)));
            }
        }
        return listaDouble.ToArray();
    }
}