Csvhelper: рдЧрд┐рдирддреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдорд╛рд░реНрдЪ 2018  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: JoshClose/CsvHelper

рдореЗрд░реЗ рдкрд╛рд╕ #92 рдкрд░ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдореБрджреНрджрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ 5 рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рдкреБрд░рд╛рдиреЗ рдореБрджреНрджреЗ рд╕реЗ рдЯрдХрд░рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рдирдпрд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдПрдиреНрдпреВрдорд░реЗрдЯреЗрдб рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдкрд░ Count() рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдХрд░реНрд╕рд░ рдЦрддреНрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдкрд░ рдЖрдЧреЗ рдХрд╛ рдСрдкрд░реЗрд╢рди/ foreach рд▓реВрдк рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реМрдЯрд╛рдПрдЧрд╛ред

рдореЗрд░реЗ рдХреЛрдб рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ

````рд╕реА#
var myCSV = рдирдпрд╛ CsvReader (рдлрд╝рд╛рдЗрд▓ред OpenText (txtBox_CSVFile.Text));
myCSV.Configuration.RegisterClassMap();

var record = new MyRecordClass();
var allRecords = myCSV.EnumerateRecords(record);
int recordsLength = allRecords.Count<MyRecordClass>();

foreach (var r in allRecords)
{
    /* some read/write operation here
    */
    scannedCSVEntry++;
    progress.value = scannedCSVEntry/recordsLength;
}

````

recordsLength рдпрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдореИрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреВрдВ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ stream.Position рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдкреВрд░реА рдлрд╛рдЗрд▓ рдХреЛ рдкрдврд╝реЗ рдмрд┐рдирд╛ рдмрдбрд╝реА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛:

using(StreamReader sr = File.OpenText(txtBox_CSVFile.Text))
{
   var csvReader = new new CsvHelper.CsvReader(sr);
    while (csvReader.Read())
    {
         double progress = (double)sr.BaseStream.Position / sr.BaseStream.Length;
    }
}

рдЗрд╕реЗ GetRecords рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ:

foreach(var record in csvReader.GetRecords<MyRecordClass>())
{
    double progress = (double)sr.BaseStream.Position / sr.BaseStream.Length;
}

рд╕рднреА 5 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВред

  1. ToList рдХрд░рдХреЗ рдкреВрд░реА рдЪреАрдЬрд╝ рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рдЦреАрдВрдЪ рд▓реЗрдВред рдлрд┐рд░ рдЖрдк рдбреЗрдЯрд╛ рдкрд░ рдХрдИ рдСрдкрд░реЗрд╢рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ Count ред
  2. рдкреВрд░реА рдлрд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВред рдЖрдк рдкреВрд░реА рдлрд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдЧрд┐рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЛрдИ рд╡рд░реНрдЧ рд╡рд╕реНрддреБ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
  3. рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрд╕ рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВред рдлрд┐рд░ рдЖрдк рдЕрдкрдиреА рдкреНрд░рдЧрддрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Context.RawRow рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдзрдиреНрдпрд╡рд╛рдж,
рдореИрдВрдиреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ рд╡рд┐рдзрд┐ 2 рдЪреБрдиреАред

C# StreamReader sr = File.OpenText(txtBox_CSVFile.Text); int recordsLength = 0; while(sr.ReadLine() != null) { ++recordsLength; } recordsLength--; // discount 1 line because there are column headers in first row. Console.WriteLine("recordsLength : " + recordsLength); sr.Close();

рдХреНрдпрд╛ EnumerateRecords() рд╕рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рд╣рд╛рдЗрдбреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдЯреНрд░реАрдо рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ? рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ Close() рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ using рдмреНрд▓реЙрдХ рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рд╣реИред

using(StreamReader sr = File.OpenText(txtBox_CSVFile.Text))
{
    int recordsLength = 0;
    while(sr.ReadLine() != null)
    {
        ++recordsLength;
    }
    recordsLength--; // discount 1 line because there are column headers in first row.
    Console.WriteLine("recordsLength : " + recordsLength);
}

рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ stream.Position рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдкреВрд░реА рдлрд╛рдЗрд▓ рдХреЛ рдкрдврд╝реЗ рдмрд┐рдирд╛ рдмрдбрд╝реА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛:

using(StreamReader sr = File.OpenText(txtBox_CSVFile.Text))
{
   var csvReader = new new CsvHelper.CsvReader(sr);
    while (csvReader.Read())
    {
         double progress = (double)sr.BaseStream.Position / sr.BaseStream.Length;
    }
}

рдЗрд╕реЗ GetRecords рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ:

foreach(var record in csvReader.GetRecords<MyRecordClass>())
{
    double progress = (double)sr.BaseStream.Position / sr.BaseStream.Length;
}

рдореИрдВрдиреЗ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдЬрд╛рдВрдЪ рд▓рд┐рдпрд╛ рд╣реИ

foreach(var record in csvReader.GetRecords<MyRecordClass>())
{
    double progress = (double)sr.BaseStream.Position / sr.BaseStream.Length;
}

рдЬреЛ рдореЗрд░реЗ рдХрд╛рдо рдирд╣реАрдВ рдЖрдпрд╛ред
рд▓реЗрдХрд┐рди рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

foreach(var record in csvReader.GetRecords<MyRecordClass>())
{
    double progress = (double)csvReader.Context.CharPosition / csvReader.Context.CharsRead;
}

рдордирдЪрд╛рд╣рд╛ рдкрд░рд┐рдгрд╛рдо рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Dushyant262 picture Dushyant262  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

malinru picture malinru  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dsotiriades picture dsotiriades  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

muzzamo picture muzzamo  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

SuperSkippy picture SuperSkippy  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ