| 184 | } |
| 185 | |
| 186 | func (i *ZipCodeImporter) loadLocalities(file string) error { |
| 187 | f, err := os.Open(file) |
| 188 | if err != nil { |
| 189 | return err |
| 190 | } |
| 191 | defer f.Close() |
| 192 | |
| 193 | decoder := transform.NewReader(f, charmap.ISO8859_1.NewDecoder()) |
| 194 | reader := csv.NewReader(decoder) |
| 195 | reader.Comma = '@' |
| 196 | reader.LazyQuotes = true |
| 197 | |
| 198 | for { |
| 199 | record, err := reader.Read() |
| 200 | if err == io.EOF { |
| 201 | break |
| 202 | } |
| 203 | if err != nil { |
| 204 | continue |
| 205 | } |
| 206 | // 0 LOC_NU, 1 UFE_SG, 2 LOC_NO, 3 CEP, 4 LOC_IN_SIT, 5 LOC_IN_TIPO_LOC, |
| 207 | // 6 LOC_NU_SUB, 7 LOC_NO_ABREV, 8 MUN_NU |
| 208 | if len(record) < 9 { |
| 209 | continue |
| 210 | } |
| 211 | loc := &Localidade{ |
| 212 | Codigo: strings.TrimSpace(record[0]), |
| 213 | UF: strings.TrimSpace(record[1]), |
| 214 | Nome: strings.TrimSpace(record[2]), |
| 215 | CEP: i.normalizeCEP(strings.TrimSpace(record[3])), |
| 216 | Situacao: strings.TrimSpace(record[4]), |
| 217 | TipoLocalidade: strings.TrimSpace(record[5]), |
| 218 | CodigoSub: strings.TrimSpace(record[6]), |
| 219 | NomeAbreviado: strings.TrimSpace(record[7]), |
| 220 | CodigoIBGE: strings.TrimSpace(record[8]), |
| 221 | } |
| 222 | if loc.Codigo != "" { |
| 223 | localities[loc.Codigo] = loc |
| 224 | } |
| 225 | } |
| 226 | return nil |
| 227 | } |
| 228 | |
| 229 | func (i *ZipCodeImporter) loadDistricts(file string) error { |
| 230 | f, err := os.Open(file) |