Files
LeafWeb/Core/Parsers/CsvParserBase.cs

59 lines
1.5 KiB
C#

using System;
using System.IO;
using CsvHelper;
namespace LeafWeb.Core.Parsers
{
public class CsvParserBase : IDisposable
{
private readonly StreamReader _reader;
private readonly MemoryStream _memoryStream;
protected readonly CsvReader CsvReader;
protected CsvParserBase(FileSystemInfo csvFile, bool ignoreBlankLines)
{
_reader = OpenCsv(csvFile);
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 csvReader = new CsvReader(reader);
csvReader.Configuration.HasHeaderRecord = false;
csvReader.Configuration.IgnoreBlankLines = ignoreBlankLines;
csvReader.Configuration.ReadingExceptionOccurred = exception => false;
return csvReader;
}
internal static StreamReader OpenCsv(FileSystemInfo csvFile)
{
if (!csvFile.Exists)
throw new FileNotFoundException($"Cannot find file '{csvFile.Name}'");
return File.OpenText(csvFile.FullName);
}
protected string[] GetNextCsvRowValues()
{
// get values from row
if (!CsvReader.Read())
return null;
return CsvReader.Context.Record;
}
public void Dispose()
{
_reader.Dispose();
_memoryStream?.Dispose();
}
}
}