Exemplo n.º 1
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="zipcodeCitiesSetting">allows to configure the path to the zuordnung_plz_ort.csv</param>
        /// <exception cref="ArgumentNullException">when zipcodeCitiesSetting == null</exception>
        /// <exception cref="ArgumentException">when IsNullOrWhiteSpace(zipcodeCitiesSetting.Path)</exception>
        public ZipcodeToCities(ZipcodeToCitiesSetting zipcodeCitiesSetting)
        {
            if (zipcodeCitiesSetting == null)
            {
                throw new ArgumentNullException(nameof(zipcodeCitiesSetting));
            }

            if (string.IsNullOrWhiteSpace(zipcodeCitiesSetting.Path))
            {
                throw new ArgumentException("Path must not be nullOrWhitespace");
            }

            Dictionary = ReadZipcodeCitiesFromCsv(zipcodeCitiesSetting);
        }
Exemplo n.º 2
0
        private static Dictionary <int, IEnumerable <string> > ReadZipcodeCitiesFromCsv(
            ZipcodeToCitiesSetting settings)
        {
            const int zipcodeIndex = 2;
            const int cityIndex    = 1;

            string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
                                       settings.Path);

            return(File.ReadAllText(path)
                   .Split(Environment.NewLine)
                   .Skip(1)                   // Skip Header
                   .Where(line => line != "") // Skip empty lines
                   .Select(csvLine =>         // Select zipcode and city
            {
                var column = csvLine.Split(",");
                return new KeyValuePair <int, string>(int.Parse(column[zipcodeIndex]), column[cityIndex]);
            })
                   .GroupBy(k => k.Key)
                   .ToDictionary(k => k.Key, k => k.Select(g => g.Value)));
        }