示例#1
0
 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);
             }
     }
 }
示例#2
0
 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));
 }
示例#3
0
 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));
 }
示例#4
0
 public IP2CountryCSVFileSource(string path, ICSVRecordParser <T> parser)
     : this(path, parser, Encoding.UTF8)
 {
 }