protected IEnumerable <U> ReadFile <U>(string path, ICSVRecordParser <U> parser) where U : IIPRangeCountry { if (IsZIP(path)) { using (var zipArchive = new ZipArchive(File.OpenRead(path), ZipArchiveMode.Read)) { foreach (var entry in zipArchive.Entries) { foreach (var r in Read(entry.Open(), parser)) { yield return(r); } } } } else if (IsGZ(path)) { using (var s = File.OpenRead(path)) using (var g = new GZipStream(s, CompressionMode.Decompress)) foreach (var r in Read(g, parser)) { yield return(r); } } else { using (var s = File.OpenRead(path)) foreach (var r in Read(s, parser)) { yield return(r); } } }
public IEnumerable <U> Read <U>(Stream stream, ICSVRecordParser <U> parser) where U : IIPRangeCountry { return(ReadLines(stream) .Where(l => l.Length > 0 && l[0] != '#' && !char.IsWhiteSpace(l[0])) .Select(l => parser.ParseRecord(l)) .Where(r => r != null)); }
public IP2CountryCSVFileSource(string path, ICSVRecordParser <T> parser, Encoding encoding) { Path = path ?? throw new ArgumentNullException(nameof(path)); Parser = parser ?? throw new ArgumentNullException(nameof(parser)); Encoding = encoding ?? throw new ArgumentNullException(nameof(encoding)); }
public IP2CountryCSVFileSource(string path, ICSVRecordParser <T> parser) : this(path, parser, Encoding.UTF8) { }