0

私の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;
}
4

2 に答える 2

0

私が考えることができる唯一の理由は、fileRows の一部の行に期待される 4 つの要素がない可能性があることです。

于 2013-01-11T05:57:45.493 に答える
0

理解した。行を列に分割する必要がありました。

上記の私の最新の更新を参照してください。

于 2013-01-11T06:19:17.497 に答える