annotate Porori/src2/porori.go @ 0:aaaa401818a1 draft

first commit.
author pyon <pyon@macmini>
date Mon, 24 May 2021 21:32:58 +0900
parents
children 65b8529196d5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
1 package main
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
2
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
3 import (
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
4 "encoding/csv"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
5 "encoding/json"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
6 "fmt"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
7 "io/ioutil"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
8 "log"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
9 "os"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
10 "sort"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
11 "strings"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
12 "time"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
13
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
14 "golang.org/x/text/encoding/japanese"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
15 "golang.org/x/text/transform"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
16 )
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
17
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
18 const jsonfile = "porori.json"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
19
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
20 type Sinsei struct {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
21 No string
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
22 Name string
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
23 Ymd string
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
24 Kbn string
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
25 Ccn string
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
26 Bgn string
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
27 End string
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
28 Term string
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
29 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
30
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
31 func (s Sinsei) String() string {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
32 return strings.Join([]string{s.No, s.Name, s.Ymd, s.Kbn, s.Bgn, s.End, s.Term, s.Ccn}, ",")
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
33 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
34
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
35 func (s Sinsei) TransDate (ymd string) (time.Time, string) {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
36 zero := time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
37 if !strings.HasPrefix(ymd, "20") {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
38 return zero, "" // it's dummy
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
39 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
40 t, _ := time.Parse("20060102", ymd)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
41 return t, t.Format(" 2006-01-02")
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
42 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
43
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
44 func (s Sinsei) CountMonth(bgn, end time.Time) int {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
45 if bgn.IsZero() {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
46 return 0
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
47 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
48
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
49 m := (end.Year() * 12 + int(end.Month())) - (bgn.Year() * 12 + int(bgn.Month()))
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
50 if bgn.Day() == 1 {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
51 m++
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
52 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
53 return m
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
54 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
55
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
56 func (s *Sinsei) ChangeExpression() {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
57 s.No = "=\"" + strings.TrimSpace(s.No) + "\""
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
58
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
59 switch s.Kbn {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
60 case "01":
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
61 s.Kbn = "新規"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
62 case "02":
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
63 s.Kbn = "更新"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
64 case "10":
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
65 s.Kbn = "支介"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
66 case "05":
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
67 s.Kbn = "区変"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
68 case "03":
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
69 s.Kbn = "転入"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
70 case "09":
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
71 s.Kbn = "証交"
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
72 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
73 s.Kbn, _, _ = transform.String(japanese.ShiftJIS.NewEncoder(), s.Kbn)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
74
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
75 var bgn, end time.Time
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
76 _, s.Ymd = s.TransDate(s.Ymd)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
77 _, s.Ccn = s.TransDate(s.Ccn)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
78 bgn, s.Bgn = s.TransDate(s.Bgn)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
79 end, s.End = s.TransDate(s.End)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
80
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
81 s.Term = fmt.Sprintf("%d", s.CountMonth(bgn, end))
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
82 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
83
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
84 func main() {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
85
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
86 if len(os.Args) != 2 {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
87 fmt.Fprint(os.Stderr, "bat input.")
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
88 os.Exit(1)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
89 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
90
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
91 // Filter Setting
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
92 type YF struct {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
93 From string
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
94 To string
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
95 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
96 var yf YF
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
97
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
98 content, err := ioutil.ReadFile(jsonfile)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
99 if err != nil {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
100 log.Fatal(err)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
101 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
102 if err := json.Unmarshal(content, &yf); err != nil {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
103 log.Fatal(err)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
104 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
105
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
106 // Read CSV
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
107 content, err = ioutil.ReadFile(os.Args[1])
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
108 if err != nil {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
109 log.Fatal(err)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
110 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
111
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
112 r := csv.NewReader(strings.NewReader(string(content)))
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
113
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
114 records, err := r.ReadAll()
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
115 if err != nil {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
116 log.Fatal(err)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
117 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
118
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
119 // Main Proccess
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
120 var sinsei []Sinsei
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
121
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
122 for _, record := range records {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
123 if record[4] < yf.From || record[4] > yf.To {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
124 continue
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
125 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
126
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
127 ss := Sinsei{
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
128 No: record[0],
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
129 Name: record[1],
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
130 Ymd: record[2],
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
131 Kbn: record[3],
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
132 Ccn: record[4],
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
133 Bgn: record[5],
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
134 End: record[6],
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
135 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
136 ss.ChangeExpression()
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
137
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
138 sinsei = append(sinsei, ss)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
139 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
140
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
141 sort.Slice(sinsei, func(i, j int) bool {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
142 return sinsei[i].Ymd < sinsei[j].Ymd
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
143 })
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
144
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
145 // Output
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
146 header := strings.Join([]string{"被保番", "氏名", "申請日", "区分", "開始日", "終了日", "期間", "審査会"}, ",")
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
147 header, _, _ = transform.String(japanese.ShiftJIS.NewEncoder(), header)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
148 fmt.Println(header)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
149
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
150 for _, s := range sinsei {
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
151 fmt.Println(s)
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
152 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
153 }
aaaa401818a1 first commit.
pyon <pyon@macmini>
parents:
diff changeset
154