annotate superFC/fc_tmpl.go @ 4:ff7a3c254956 draft

new: superFC
author pyon <pyon@macmini>
date Tue, 15 Jun 2021 06:19:45 +0900
parents
children 519d6fd0bfd9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
1 /*
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
2 fcgo.go: Fucho de Go
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
3
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
4 Last Change: 2021-06-14 月 16:14:04.
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
5 */
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
6 package main
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
7
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
8 /*
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
9 #cgo LDFLAGS: -L. -lxdwapi -static
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
10 ##### C_SOURCE #####
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
11 */
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
12 import "C"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
13
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
14 import (
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
15 "encoding/csv"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
16 "flag"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
17 "fmt"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
18 "io"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
19 "log"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
20 "os"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
21 "regexp"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
22 "strings"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
23 "time"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
24
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
25 "golang.org/x/text/encoding/japanese"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
26 "golang.org/x/text/transform"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
27 )
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
28
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
29 type Data struct {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
30 Hno string
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
31 Page string
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
32 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
33
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
34 func (d *Data) ToCsv() string {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
35 s := []string{d.Hno, d.Page}
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
36 return strings.Join(s, ",")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
37 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
38
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
39 var (
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
40 ver = "0.1"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
41
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
42 clean bool
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
43 skip bool
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
44 debug bool
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
45 xdwfile string
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
46
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
47 txtfile = "fctmp_txt.txt"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
48 infofile = "fctmp_info.csv"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
49 orderfile = "sort.list" // input
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
50 pagefile = "fctmp_page.txt"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
51 output = "output.xdw"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
52 )
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
53
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
54 func init() {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
55 /* INITIALIZE FLAGS */
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
56 flag.BoolVar(&clean, "c", false, "clean temporary files & exit")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
57 flag.BoolVar(&skip, "e", false, "use existed files")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
58 flag.BoolVar(&debug, "d", false, "debug mode")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
59 flag.StringVar(&xdwfile, "i", "fc.xdw", "target xdw file")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
60 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
61
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
62 func main() {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
63 flag.Parse()
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
64
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
65 /* PRINT HEADER */
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
66 fmt.Println("===================================================")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
67 fmt.Println(" 普徴のみならず納通なら被保番でソートできるかも... ")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
68 fmt.Printf(" - fcgo [ver %s] -\n", ver)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
69 fmt.Println("===================================================\n")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
70 print_time("now")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
71 fmt.Println("[0] start ...")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
72
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
73 /* CLEAN TEMPORARY DIRECTORY */
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
74 os.Remove(output)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
75 if !skip {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
76 clean_full()
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
77 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
78 if clean {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
79 os.Exit(0)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
80 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
81 print_time("check done")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
82
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
83 fmt.Println("[1] extract ...")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
84 if !skip {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
85 C.xdw2txt(C.CString(xdwfile), C.CString(txtfile))
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
86 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
87 print_time("extract done.")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
88
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
89 c := make(chan int)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
90 fmt.Println("[2] split ... (run background)")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
91 go func() {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
92 if !skip {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
93 C.xdwsplit1(C.CString(xdwfile))
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
94 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
95 print_time("split done.")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
96 c <- 1
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
97 }()
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
98
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
99 fmt.Println("[3] analize ...")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
100 data_hash, err := analize(txtfile, infofile)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
101 if err != nil {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
102 log.Fatal(err)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
103 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
104 print_time("analize done.")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
105 debug_print(debug, fmt.Sprintf("len = %d", len(data_hash)))
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
106
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
107 fmt.Println("[4] read order ...")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
108 h_order, n, err := read_order(orderfile)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
109 if err != nil {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
110 log.Fatal(err)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
111 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
112 print_time("read order done.")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
113 debug_print(debug, fmt.Sprintf("len = %d / %d", len(h_order), n))
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
114
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
115 fmt.Println("[5] make_list ...")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
116 n, err = make_list(h_order, data_hash, pagefile)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
117 if err != nil {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
118 log.Fatal(err)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
119 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
120 print_time("make list done.")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
121 debug_print(debug, fmt.Sprintf("order = %d", n))
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
122
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
123 <-c
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
124
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
125 fmt.Println("[6] merge ...")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
126 clean_mini()
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
127 C.xdwmerge(C.CString(pagefile), C.CString(output))
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
128 print_time("merge done.")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
129 clean_mini()
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
130
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
131 fmt.Println("[7] page ...")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
132 C.xdwaddpage(C.CString(output), C.int(1))
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
133 print_time("page done.")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
134
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
135 if !debug {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
136 fmt.Println("[8] clean ...")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
137 clean_full()
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
138 print_time("clean done.")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
139 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
140 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
141
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
142 func analize(txtfile, infofile string) (map[string]Data, error) {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
143 hash := make(map[string]Data)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
144
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
145 c, err := os.ReadFile(txtfile)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
146 if err != nil {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
147 return hash, err
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
148 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
149 r := strings.NewReader(string(c))
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
150 tr := transform.NewReader(r, japanese.ShiftJIS.NewDecoder())
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
151 b, err := io.ReadAll(tr)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
152 if err != nil {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
153 return hash, err
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
154 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
155
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
156 regHno := regexp.MustCompile(`0[1238]0[0-9]{7}`)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
157
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
158 var csv string
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
159
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
160 buf := strings.Split(string(b), "期別保険料額")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
161 for p, v := range buf[:len(buf)-1] {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
162 s := zen2han(v)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
163 hno := regHno.FindString(s)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
164 page := fmt.Sprintf("%05d", p + 1)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
165
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
166 data := Data {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
167 Hno: hno,
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
168 Page: page,
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
169 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
170 hash[hno] = data
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
171
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
172 csv += data.ToCsv() + "\n"
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
173 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
174
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
175 if err := os.WriteFile(infofile, []byte(csv), 0644); err != nil {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
176 return hash, err
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
177 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
178 return hash, nil;
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
179 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
180
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
181 func zen2han(s string) (string) {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
182 s = strings.ReplaceAll(s, "0", "0")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
183 s = strings.ReplaceAll(s, "1", "1")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
184 s = strings.ReplaceAll(s, "2", "2")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
185 s = strings.ReplaceAll(s, "3", "3")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
186 s = strings.ReplaceAll(s, "4", "4")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
187 s = strings.ReplaceAll(s, "5", "5")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
188 s = strings.ReplaceAll(s, "6", "6")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
189 s = strings.ReplaceAll(s, "7", "7")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
190 s = strings.ReplaceAll(s, "8", "8")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
191 return strings.ReplaceAll(s, "9", "9")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
192 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
193
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
194 func read_order(csvfile string) ([]string, int, error) {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
195 var order []string
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
196
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
197 c, err := os.ReadFile(csvfile)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
198 if err != nil {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
199 return order, -1, err
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
200 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
201 r := strings.NewReader(string(c))
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
202 tr := transform.NewReader(r, japanese.ShiftJIS.NewDecoder())
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
203 b, err := io.ReadAll(tr)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
204 if err != nil {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
205 return order, -1, err
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
206 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
207
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
208 n := 0
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
209 cr := csv.NewReader(strings.NewReader(string(b)))
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
210 for {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
211 record, err := cr.Read()
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
212 if err == io.EOF {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
213 break
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
214 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
215 if err != nil {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
216 return order, n, err
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
217 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
218
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
219 s := zen2han(record[0])
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
220 if strings.HasPrefix(s, "0") {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
221 order = append(order, s)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
222 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
223 n++
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
224 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
225 return order, n, nil
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
226 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
227
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
228 func make_list(h_order []string, hash map[string]Data, pagefile string) (int, error) {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
229 var n int
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
230 var list []string
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
231 done := make(map[string]bool)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
232
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
233 for _, h := range h_order {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
234 if _, ok := done[h]; !ok {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
235 if data, ok := hash[h]; ok {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
236 list = append(list, data.Page)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
237 done[h] = true
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
238 n++
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
239 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
240 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
241 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
242
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
243 if err := write_pagefile(pagefile, list); err != nil {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
244 return n, err
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
245 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
246 return n, nil
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
247 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
248
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
249 func write_pagefile(file string, list []string) error {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
250 f, err := os.OpenFile(file, os.O_RDWR|os.O_CREATE, 0755)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
251 if err != nil {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
252 return err
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
253 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
254 for _, p := range list {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
255 fmt.Fprintf(f, "fctmp_%s.xdw\n", p)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
256 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
257 if err := f.Close(); err != nil {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
258 return err
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
259 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
260 return nil
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
261 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
262
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
263 func print_time(msg string) {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
264 now := time.Now()
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
265 fmt.Printf("\t%v # %s\n", now, msg)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
266 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
267
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
268 func debug_print(debug bool, msg string) {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
269 if debug {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
270 fmt.Printf("\t%s\n", msg)
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
271 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
272 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
273
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
274 func clean_full() error {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
275 return clean_file("fctmp_")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
276 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
277
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
278 func clean_mini() error {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
279 return clean_file("fctmp_b")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
280 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
281
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
282 func clean_file(prefix string) error {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
283 files, err := os.ReadDir(".")
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
284 if err != nil {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
285 return err
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
286 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
287
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
288 for _, file := range files {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
289 if strings.HasPrefix(file.Name(), prefix) {
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
290 os.Remove(file.Name())
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
291 continue
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
292 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
293 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
294 return err
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
295 }
ff7a3c254956 new: superFC
pyon <pyon@macmini>
parents:
diff changeset
296