рдореЗрд░реЗ рдкрд╛рд╕ #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
рдпрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдореИрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреВрдВ?
рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВред
ToList
рдХрд░рдХреЗ рдкреВрд░реА рдЪреАрдЬрд╝ рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рдЦреАрдВрдЪ рд▓реЗрдВред рдлрд┐рд░ рдЖрдк рдбреЗрдЯрд╛ рдкрд░ рдХрдИ рдСрдкрд░реЗрд╢рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ Count
ред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;
}
рдордирдЪрд╛рд╣рд╛ рдкрд░рд┐рдгрд╛рдо рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ
stream.Position
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдкреВрд░реА рдлрд╛рдЗрд▓ рдХреЛ рдкрдврд╝реЗ рдмрд┐рдирд╛ рдмрдбрд╝реА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛:рдЗрд╕реЗ GetRecords рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ: