首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Lumenworks CsvReader解析CSV文件的最后一行

无法使用Lumenworks CsvReader解析CSV文件的最后一行
EN

Stack Overflow用户
提问于 2015-10-21 16:12:14
回答 1查看 1.3K关注 0票数 0

我正在尝试使用CSV文件解析下面的LumenWorks CsvReader

这是我的密码:

代码语言:javascript
复制
    using (DatabaseEntities context = new DatabaseEntities())
    {
        using (var csv = new CachedCsvReader(new StreamReader(@"C:\Users\Me\Desktop\sdn.csv"), false))
        {
            context.Database.ExecuteSqlCommand("TRUNCATE TABLE ofac_sdn");

            foreach (var entry in csv)
            {
                var ofac = new ofac_sdn
                {
                    ent_num = Convert.ToInt32(entry[0]),
                    SDN_Name = entry[1],
                    SDN_Type = entry[2],
                    Program = entry[3],
                    Title = entry[4],
                    Call_Sign = entry[5],
                    Vess_type = entry[6],
                    Tonnage = entry[7],
                    GRT = entry[8],
                    Vess_flag = entry[9],
                    Vess_owner = entry[10],
                    Remarks = entry[11]
                };

                context.ofac_sdn.Add(ofac);
            }
        }

        context.SaveChanges();

除了最后一句之外,我没有任何问题。entry中的每个foreach包含正确分隔的每一行信息,我的ofac_sdn实例装载了正确的数据。

但是,CSV文件在文件末尾有一些奇怪的地方,如下所示(取自Notepad++):

foreach到达最后一行时,它会抛出以下异常:

“CSV似乎在'0‘位置的记录'5913’字段'1‘附近损坏。目前的原始数据:’”。

我能想到的最简单、最简单的解决方案是在尝试解析文件之前以编程方式删除文件的最后一行,但这看起来是一个“廉价”的修复,不会解决根本问题。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-28 17:19:54

在我尝试CsvHelper by 乔希·克洛斯之前,我无法让它与Lumenworks、乔希·克洛斯或几乎任何其他的库一起工作。

代码语言:javascript
复制
using (DatabaseEntities context = new DatabaseEntities())
{
    if (ofacFile != null)
    {
        var csv = new CsvReader(ofacFile);
        csv.Configuration.TrimFields = true;
        csv.Configuration.HasHeaderRecord = false;
        context.Database.ExecuteSqlCommand("TRUNCATE TABLE ofac_sdn");

        while (csv.Read())
        {
            if (csv.GetField<string>(0) == "\u001a")
            {
                break; // End of file
            }

            var ofac = new ofac_sdn
            {
                ent_num = csv.GetField<int>(0),
                SDN_Name = csv.GetField<string>(1),
                SDN_Type = csv.GetField<string>(2),
                Program = csv.GetField<string>(3),
                Title = csv.GetField<string>(4),
                Call_Sign = csv.GetField<string>(5),
                Vess_type = csv.GetField<string>(6),
                Tonnage = csv.GetField<string>(7),
                GRT = csv.GetField<string>(8),
                Vess_flag = csv.GetField<string>(9),
                Vess_owner = csv.GetField<string>(10),
                Remarks = csv.GetField<string>(11)
            };

            context.ofac_sdn.Add(ofac);
        }
    }
}

这是唯一允许我真正阅读最后一行“损坏”行的库,尽管我不太喜欢直接比较\u001a (这是在最后一行中所写的),但它确实有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33264266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档