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