namegen.go raw
1 package main
2
3 import (
4 "bufio"
5 "fmt"
6 "log"
7 "os"
8 "sort"
9 "strings"
10 )
11
12 func main() {
13
14 wd, err := os.Getwd()
15 fmt.Fprintf(os.Stderr, "%s %v\n", wd, err)
16
17 fd, err := os.Open("../../cmd/namegen/names.csv")
18 if err != nil {
19 log.Fatal(err)
20 }
21 defer fd.Close()
22
23 output, err := os.OpenFile(
24 "../../pkg/cities/names.go", os.O_CREATE|os.O_RDWR|os.O_TRUNC,
25 0755,
26 )
27 if err != nil {
28 log.Fatal(err)
29 }
30
31 names := make([]string, 139661)
32 scanner := bufio.NewScanner(fd)
33 var counter int
34 for scanner.Scan() {
35 if counter == 0 {
36 counter++
37 continue
38 }
39 split := strings.Split(scanner.Text(), ";")
40 names[counter] =
41 strings.ReplaceAll(
42 strings.ReplaceAll(
43 split[2],
44 " ", "_",
45 ),
46 "\"", "",
47 )
48 counter++
49 }
50
51 sort.Strings(names)
52
53 fmt.Fprintln(
54 output,
55 `package cities
56
57 // Run 'go generate ./...' at the root of the repo on this package to update
58
59 `+`//go:generate go run ../../cmd/namegen/.
60
61 var NameList = []string{
62 "",`,
63 )
64 prev := names[0]
65 for i := 1; i < counter; i++ {
66 if names[i] == prev || names[i] == "" {
67 continue
68 }
69 fmt.Fprintf(output, "\t\"%s\",\n", names[i])
70 prev = names[i]
71 }
72 fmt.Fprintln(
73 output,
74 `}`,
75 )
76
77 output.Close()
78 if err := scanner.Err(); err != nil {
79 log.Fatal(err)
80 }
81 }
82