处理CSV时索引越界

本文关键字:越界 索引 CSV 处理 | 更新日期: 2023-09-27 17:50:48

我试图把我所有的文本格式的csv在一个列表或数组。例外是:

索引超出了数组的边界。

这可能是我错过的东西…

static void Main()
{
    /// 
    /// CSV Headers: Code PostDate, T, Description, RecTyp, PropAccountNmbr, Amount
    ///
    string[] CSVs = Directory.GetFiles(@"C:'csv'");
    try
    {
        foreach (string Files in CSVs)
        {
            string[] allLines = File.ReadAllLines(Files);
            var query = File.ReadAllLines(Files)
               .Skip(1)
               .Select(x => x.Split(','))
               .Select(x => new
               {
                   Code = x[0],
                   PostDate = x[1],
                   T = int.Parse(x[2]),
                   Description = x[3],
                   RecTyp = x[4],
                   PropAccountNmbr = x[5],
                   Amount = float.Parse(x[6])
               });
            foreach (var s in query)
            {
                Console.WriteLine("{0} {1} {2} {3} {4} {5} {6}", 
                    s.Code, s.PostDate, s.T, s.Description, s.RecTyp, s.PropAccountNmbr, s.Amount);
            }
        }
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }
}

这是一个CSV的示例,问题是这个CSV是一个文本文档(.txt),具有CSV格式:

<>之前代码日期描述rectype PropAccountNmbr金额bk,2015-03-01,2,Bankard,无,000210709109,32284.50bpi,2015-03-01,2, bpi经典,无,000210709107,3415.18bpi,2015-03-01,2, bpi经典,无,000210709107,19780.00

处理CSV时索引越界

使用合适的解析器处理CSV。

这个是相当被接受的:http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader

贫乏的例子:

static void Main()
{
    var files = Directory.GetFiles(@"C:'logs", "*.csv");
    foreach (var file in files)
    {
        using (var csv = new CsvReader(new StreamReader(file, Encoding.UTF8), true))
        {
            var rows = csv.Select(row => String.Join(" ", row));
            foreach (var row in rows)
            {
                Console.WriteLine(row);
            }
        }
    }
}

推荐阅读:停止滚动您自己的CSV解析器!

感谢所有评论的人:我简化了代码,只是把所有的值放在一个数组中,因为它们是在控制台中编写的。我还删除了。select lambda与创建新对象,所以我可以摆脱超出边界数组异常。