예제 #1
0
        private async Task <List <T> > GetNormalizedData <T>(string runId, string fileName, int startIndex, int count)
        {
            var stream = await FileStreamFactory.GetStreamAsync(Configuration, runId, fileName);

            if (stream == null)
            {
                return(new List <T>());
            }
            using (stream)
            {
                bool isRecordBad = false;
                var  csvConfig   = new Configuration
                {
                    Delimiter        = ",",
                    TrimOptions      = TrimOptions.Trim,
                    IgnoreBlankLines = true,
                    IgnoreQuotes     = false,
                    BadDataFound     = (a) =>
                    {
                        isRecordBad = true;
                    }
                };

                csvConfig.TypeConverterCache.AddConverter <DateTime?>(new DMYDateConverter());

                var currIndex = 0;
                var results   = new List <T>();

                using (var reader = new CsvReader(new CsvParser(new StreamReader(stream), csvConfig)))
                {
                    while (reader.Read())
                    {
                        if (!isRecordBad)
                        {
                            if (currIndex >= startIndex + count)
                            {
                                break;
                            }
                            if (currIndex >= startIndex)
                            {
                                results.Add(reader.GetRecord <T>());
                            }
                            else if (currIndex == 0)
                            {
                                reader.GetRecord <T>(); //If we don't read the first record, CSVHelper errors
                            }
                            currIndex++;
                        }
                        isRecordBad = false;
                    }
                }
                return(results);
            }
        }