Reputation: 25
I have a text string from which using the library I would like to skip the blanks inside the "*" delimiters. The problem I find is that when there is "**" it takes it as a row and should not be so.
TEXT:
ISA*00**00**09*005070479TMAN*01*FBLP*190305*2029**00405*000033241*0*
What I´m getting :
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
I´ve tried :
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);
}
}
}
What I would like to get:
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
Upvotes: 2
Views: 1378
Reputation: 9054
You are trying to skip empty fields, not empty rows. If you know the location of the fields, you can specify them in Index()
in your ClassMap<isa>
. An empty row would look like ***************
.
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);
}
}
Upvotes: 1