[英]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.