繁体   English   中英

处理CSV时超出范围

[英]Index out of bounds while processing CSV

我正在尝试将所有文​​本格式的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是具有CSV格式的文本文档(.txt):

Code PostDate   T Description                    RecTyp PropAccountNmbr                    Amount
bk  ,2015-03-01,2,Bankard                       ,none  ,000210709109            ,        32284.50
bpi ,2015-03-01,2,BPI Classic                   ,none  ,000210709107            ,         3415.18
bpi ,2015-03-01,2,BPI Classic                   ,none  ,000210709107            ,        19780.00

使用适当的解析器处理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解析器!

感谢所有发表评论的人:我简化了代码,将所有值放入控制台中,将它们放入数组中。 我还删除了.lambda创建新对象,以便摆脱边界数组异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM