如何使用CsvHelper跳过空白行

时间:2019-10-04 16:59:05

标签: c# 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

1 个答案:

答案 0 :(得分:0)

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

***************