57 lines
1.6 KiB
C#
57 lines
1.6 KiB
C#
using System.Globalization;
|
|
using CsvHelper;
|
|
using CsvHelper.Configuration;
|
|
|
|
namespace Core.Parsers;
|
|
|
|
public class CsvParserBase : IDisposable
|
|
{
|
|
private readonly StreamReader _reader;
|
|
//private readonly MemoryStream _memoryStream;
|
|
protected readonly CsvReader CsvReader;
|
|
|
|
protected CsvParserBase(FileSystemInfo csvFile, bool ignoreBlankLines) : this(OpenCsv(csvFile), ignoreBlankLines)
|
|
{
|
|
}
|
|
|
|
protected CsvParserBase(StreamReader reader, bool ignoreBlankLines)
|
|
{
|
|
_reader = reader;
|
|
CsvReader = InitCsvReader(_reader, ignoreBlankLines);
|
|
}
|
|
|
|
//protected CsvParserBase(byte[] fileContents, bool ignoreBlankLines)
|
|
//{
|
|
// _memoryStream = new MemoryStream(fileContents);
|
|
// _reader = new StreamReader(_memoryStream);
|
|
|
|
// CsvReader = InitCsvReader(_reader, ignoreBlankLines);
|
|
//}
|
|
|
|
private static CsvReader InitCsvReader(TextReader reader, bool ignoreBlankLines)
|
|
{
|
|
var csvConfiguration = new CsvConfiguration(CultureInfo.CurrentCulture)
|
|
{
|
|
HasHeaderRecord = true,
|
|
IgnoreBlankLines = ignoreBlankLines,
|
|
ReadingExceptionOccurred = exception => false,
|
|
MissingFieldFound = null
|
|
};
|
|
|
|
var csvReader = new CsvReader(reader, csvConfiguration);
|
|
return csvReader;
|
|
}
|
|
|
|
internal static StreamReader OpenCsv(FileSystemInfo csvFile)
|
|
{
|
|
if (!csvFile.Exists)
|
|
throw new FileNotFoundException($"Cannot find file '{csvFile.Name}'");
|
|
|
|
return File.OpenText(csvFile.FullName);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_reader.Dispose();
|
|
}
|
|
} |