-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgenerate.go
110 lines (85 loc) · 1.98 KB
/
generate.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package main
import (
"bufio"
"bytes"
"fmt"
"github.com/vgmdj/utils/chars"
"io"
"io/ioutil"
"log"
"os"
"os/exec"
"strings"
)
func generateFileData(year int, fileName string) (string, error) {
content, err := ioutil.ReadFile(fileName)
if err != nil {
return "", err
}
divisions := "map[string]string{"
buff := bytes.NewBuffer(content)
for {
line, err := buff.ReadString('\n')
if err != nil {
if err == io.EOF {
break
}
}
lineScanner := bufio.NewScanner(strings.NewReader(line))
lineScanner.Split(bufio.ScanWords)
lineScanner.Scan()
source := lineScanner.Text()
if source == "Source" {
continue
}
//revision
lineScanner.Scan()
lineScanner.Scan()
code := lineScanner.Text()
lineScanner.Scan()
name := lineScanner.Text()
divisions += fmt.Sprintf(`"%s": "%s",`, code, name) + "\n"
}
divisions += "}"
return divisions, nil
}
func generateFile(year int, fileName string) {
gocode := fmt.Sprintf(`package gbdata
import "github.com/vgmdj/utils/area"
func init() {
s := new(area.Selector)
s.Register("%d", rev%d)
}
var rev%d = `, year, year, year)
data, err := generateFileData(year, fileName)
if err != nil {
log.Fatal(err)
return
}
gocode = fmt.Sprintf("%s %s", gocode, data)
err = ioutil.WriteFile(fmt.Sprintf("gbdata/gb2260_%d.go", year), []byte(gocode), os.ModePerm)
if err != nil {
log.Fatal(err)
return
}
}
// before use it, you should use go build and then execute the generate (or generate.exe)
func main() {
dir := "data/"
latest := 201802
years := []int{1986, 1987, 1988, 1989,
1990, 1991, 1992, 1993, 1994,
1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004,
2005, 2006, 2007, 2008, 2009,
2010, 2011, 2012, 2013, 2014,
2015, 2016, 2017}
for _, v := range years {
fileName := fmt.Sprintf("%s%d12.tsv", dir, v)
generateFile(v, fileName)
}
generateFile(chars.TakeLeftInt(latest, 4), fmt.Sprintf("%s%d.tsv", dir, latest))
cmd := exec.Command("go", "fmt", "./gbdata/")
cmd.Start()
return
}