繁体   English   中英

如何使用 CsvHelper 跳过空白行

[英]How to skip blank rows using CsvHelper

我有一个使用库的文本字符串,我想跳过“*”分隔符内的空格。 我发现的问题是,当有“**”时,它会把它当作一行,不应该这样。

文本:

ISA*00**00**09*005070479TMAN*01*FBLP*190305*2029**00405*000033241*0*

我得到了什么:

auth_inf_qua;sec_inf_qua;inter_id_qua;inter_sender_id;inter__id_qua2;inter_reciev_id;date_isa;hour_date;inter_cntrlver_num;inter_ctrol_num;ackn_rqstd

00;;00;;09;005070479TMAN;01;FBLP;190305;2029;00405

我试过了:

csv.Configuration.ShouldSkipRecord = row => row.All( string.IsNullOrWhiteSpace );
C#

        using (var reader = new StreamReader(texto))
            using (var csv = new CsvReader(reader))
            {
//which configuration I should use
                csv.Configuration.HasHeaderRecord = false;
                csv.Configuration.Delimiter = "*";
                csv.Context.ReaderConfiguration.;

                csv.Configuration.RegisterClassMap<IsaMap>();
                ;
                var IsaRecords = new List<isa>();

                while (csv.Read())
                {// maybe a condition
                    switch (csv.GetField(0))
                    {
                        case "ISA":
                            IsaRecords.Add(csv.GetRecord<isa>());
                            break;

                        default:
                            throw new InvalidOperationException("Unknown record type.");
                    }
                }
                using (var writer = new StreamWriter(rutasal))
                using (var csv2 = new CsvWriter(writer))
                {
                    csv2.WriteRecords(IsaRecords);
                }

            }
        }

        public class isa
        {
            public string auth_inf_qua { get; set; }
            public string sec_inf_qua { get; set; }
            public string inter_id_qua { get; set; }
            public string inter_sender_id { get; set; }
            public string inter__id_qua2 { get; set; }
            public string inter_reciev_id { get; set; }
            public string date_isa { get; set; }
            public string hour_date { get; set; }
            public string inter_cntrlver_num { get; set; }
            public string inter_ctrol_num { get; set; }
            public string ackn_rqstd { get; set; }
        }

        public sealed class IsaMap : ClassMap<isa>
        {
            public IsaMap()
            {
                Map(m => m.auth_inf_qua).Index(1);
                Map(m => m.sec_inf_qua).Index(2);
                Map(m => m.inter_id_qua).Index(3);
                Map(m => m.inter_sender_id).Index(4);
                Map(m => m.inter__id_qua2).Index(5);
                Map(m => m.inter_reciev_id).Index(6);
                Map(m => m.date_isa).Index(7);
                Map(m => m.hour_date).Index(8);
                Map(m => m.inter_cntrlver_num).Index(9);
                Map(m => m.inter_ctrol_num).Index(10);
                Map(m => m.ackn_rqstd).Index(11);
            }
        }
    }

我想得到什么:

auth_inf_qua;sec_inf_qua;inter_id_qua;inter_sender_id;inter__id_qua2;inter_reciev_id;date_isa;hour_date;inter_cntrlver_num;inter_ctrol_num;ackn_rqstd

00;00;09;005070479TMAN;01;FBLP;190305;2029;U;00405;000033241;0

您正在尝试跳过空字段,而不是空行。 如果您知道字段的位置,您可以在ClassMap<isa>Index()中指定它们。 空行看起来像***************

public sealed class IsaMap : ClassMap<isa>
{
    public IsaMap()
    {
        Map(m => m.auth_inf_qua).Index(1);
        Map(m => m.sec_inf_qua).Index(3);
        Map(m => m.inter_id_qua).Index(5);
        Map(m => m.inter_sender_id).Index(6);
        Map(m => m.inter__id_qua2).Index(7);
        Map(m => m.inter_reciev_id).Index(8);
        Map(m => m.date_isa).Index(9);
        Map(m => m.hour_date).Index(10);
        Map(m => m.inter_cntrlver_num).Index(12);
        Map(m => m.inter_ctrol_num).Index(13);
        Map(m => m.ackn_rqstd).Index(14);
    }
}

暂无
暂无

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

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