Files
chapter-organizer/Core/Parsers/CsvParserBase.cs
T

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();
}
}