43 lines
1.0 KiB
C#
43 lines
1.0 KiB
C#
namespace Udara.Common.Feature.Csv;
|
|
|
|
public sealed class CsvParser : ICsvParser
|
|
{
|
|
public IReadOnlyList<string[]> ParseRaw(string csvContent)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(csvContent))
|
|
return Array.Empty<string[]>();
|
|
|
|
var lines = csvContent
|
|
.Split('\n', StringSplitOptions.RemoveEmptyEntries);
|
|
|
|
var rows = new List<string[]>(lines.Length);
|
|
|
|
foreach (var line in lines)
|
|
{
|
|
var columns = line
|
|
.TrimEnd('\r')
|
|
.Split(',', StringSplitOptions.None);
|
|
|
|
rows.Add(columns);
|
|
}
|
|
|
|
return rows;
|
|
}
|
|
|
|
public CsvParseResult Parse(string csvContent)
|
|
{
|
|
var raw = ParseRaw(csvContent);
|
|
|
|
if (raw.Count == 0)
|
|
return new CsvParseResult();
|
|
|
|
var header = raw[0];
|
|
var rows = raw.Skip(1).ToList();
|
|
|
|
return new CsvParseResult
|
|
{
|
|
Header = header,
|
|
Rows = rows
|
|
};
|
|
}
|
|
} |