从csv文件中获取数据,并将其放入数组中

时间:2012-11-28 05:06:08

标签: c#

public class Earthquake
{
    public double Magnitude { get; set; }
    public string Location { get; set; }
    public double Latitude { get; set; }
    public double Longitude { get; set; }
    public double depth { get; set; }
    public DateTime date { get; set; }
    public string EventID { get; set; }
    public string URL { get; set; }
    public Earthquake()
        : this(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty)
    { }
    public Earthquake(string magna, string locate, string lat, string longi, string dept, string dat, string Event, string website)
    {
        Magnitude = Convert.ToDouble(magna);
        Location = locate;
        Latitude = Convert.ToDouble(lat);
        Longitude = Convert.ToDouble(longi);
        depth = Convert.ToDouble(dept);
        date = Convert.ToDateTime(dat);
        EventID = Event;
        URL = website;
    }

}


public void GetData()
    {

        string[] text = File.ReadAllLines(@"Earthquakes.csv");
            Earthquake[] data = new Earthquake[1];
            foreach (string line in text)
        {
            string[] myColumns = line.Split(',');
            Earthquake[] earth = new Earthquake[myColumns[0], myColumns[1], myColumns[2], myColumns[3], myColumns[4], myColumns[5], myColumns[6], myColumns[7]];
                data[i] = earth[i];
                i++;
        }
 }

忽略评论的部分我控制了这些部分。我遇到的问题是将csv文件中的数据导入地震阵列。我收到语法错误,我知道原因,这是因为数据类型不正确,但我老实说无法弄清楚如何修复它。 此外,如果您注意到我正在尝试使用冒泡排序,并且由于没有“比较”的定义,因此我可以使用什么呢?

1 个答案:

答案 0 :(得分:1)

如果从CSV文件中读取,则可能必须从拆分值中删除空格。

尝试将.Trim()添加到列变量

myColumns[0].Trim()

如果您希望对yor数组进行排序,请考虑使用System.Linq

例如:

var byMag = earthQuakes.OrderBy(e => e.Magnitude);

查看您发布的代码,GetData()将无效。

尝试返回列表或Enumerable

 public IEnumerable<Earthquake> GetData(string filename)
     {
         string[] text = File.ReadAllLines(filename);
         foreach (string line in text)
         {
             string[] myColumns = line.Split(',');
             yield return new Earthquake(myColumns[0].Trim(), myColumns[1].Trim(), myColumns[2].Trim(), myColumns[3].Trim(), myColumns[4].Trim(), myColumns[5].Trim(), myColumns[6].Trim(), myColumns[7].Trim());
         }
     }

用法:

var earthquakes = GetData(@"Earthquakes.csv");