【问题标题】:c# class reading data from csv and returning arrayc#类从csv读取数据并返回数组
【发布时间】:2016-12-26 21:40:09
【问题描述】:

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

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

    }
}

然后我主要想:

ReadFile read = new ReadFile();
double[] arr = read.ReadFromFile;

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

【问题讨论】:

  • double[] arr = read.ReadFromFile();
  • 你从来没有在 dataString 中放任何东西。
  • while (((line = file.ReadLine()) != null) 等等。看起来像某人做作业..
  • @Crowcoder 我更正它并添加 ();并在 data[i] = double.Parse(dataString[i]); 中使用 part_of_line[i] 而不是空的 dataString[i]但还是一样
  • 我认为,您应该将流设置为开始。 stackoverflow.com/questions/2053206/…

标签: c# arrays csv


【解决方案1】:

你有很多问题。由于您的问题是在回答这个问题时,您的问题是您已经阅读了流,并且正如 Andrei Rudik 指出的那样,它现在已经结束。在每次尝试阅读之前,您必须将其设置回开头:

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

注意,这假设您的行标记总是解析为 double,这是一个容易出错的假设。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-07
    • 2020-01-13
    • 1970-01-01
    • 2015-07-16
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    相关资源
    最近更新 更多