解析CSV文件行到对象图的问题

本文关键字:对象图 问题 CSV 文件 解析 | 更新日期: 2023-09-27 17:51:23

我的CSV文件是这样的:

1,couchName1,“green”,“suede”
2,couchName2,“blue”,“suede”
3,couchName3,fail,“sued”
...etc.

我需要读取这个csv并将每一行转换为一个沙发对象图。下面是我所尝试的:

    public static IEnumerable<string[]> ReadCsvFile(string filePath)
    {
        IEnumerable<string[]> file = File.ReadLines(filePath).Select(a => a.Split(';'));
        return file;
    }

public static List<Couch> GetCouches(string csvFilePath)
{
    IEnumerable<string[]> fileRows = FileUtilities.ReadCsvFile(csvFilePath);
    if (fileRows == null) return new List<Couch>(); 
    int couchId;
    List<Couch> couches = fileRows.Select(row => new Couch
     {  
        CouchId = int.TryParse(row[0],  out couchId) ? couchId : 0,
        Name= row[1],
        Color= row[2],
        Fabric= row[3]
       }).ToList();
    return couches;
}

我得到错误{"索引超出了数组的边界。"}在LINQ select语句的行上,我试图将它们解析为我的Couch实例,并将其解析为我想要返回的通用列表。

解决方案:

这是我如何让它工作,自己解决的:

public static List<Couch> GetCouches(string csvFilePath)
{
    IEnumerable<string[]> fileRows = FileUtilities.ReadCsvFile(csvFilePath);
    List<Couch> couches = new List<Couch>(); // ADDED THIS
    if (fileRows == null) return new List<Couch>(); 
    int couchId;
    // NEW LOGIC, SPLIT OUT EACH ROW'S COLUMNS AND THEN MAKE THE OBJECT GRAPH
    foreach(string[] row in fileRows)
    {
        string[] rowColumnValues = row[0].Split(',').ToArray();
        couches.Add(new Couch
                            {
                              CouchId = int.TryParse(rowColumnValues[0],  out couchId) ? couchId : 0,
                              Name= rowColumnValues[1],
                              Color= rowColumnValues[2],
                              Fabric= rowColumnValues[3]
    }
    return couches;
}

解析CSV文件行到对象图的问题

我能想到的唯一原因是fileRows中的某些行可能没有预期的四个元素。

明白了。我需要将行分成列。