comparison Porori/src2/porori.go @ 2:65b8529196d5 draft

Porori: add comment.
author pyon <pyon@macmini>
date Sat, 29 May 2021 10:07:57 +0900
parents aaaa401818a1
children bbeb834023e3
comparison
equal deleted inserted replaced
1:743a122cae47 2:65b8529196d5
1 /*
2 Last Change: 2021-05-29 Sat 10:07:37.
3 */
1 package main 4 package main
2 5
3 import ( 6 import (
7 _ "embed"
8
4 "encoding/csv" 9 "encoding/csv"
5 "encoding/json" 10 "encoding/json"
6 "fmt" 11 "fmt"
7 "io/ioutil" 12 "io/ioutil"
8 "log" 13 "log"
13 18
14 "golang.org/x/text/encoding/japanese" 19 "golang.org/x/text/encoding/japanese"
15 "golang.org/x/text/transform" 20 "golang.org/x/text/transform"
16 ) 21 )
17 22
23 //go:embed porori.go
24 var go_source string
25
18 const jsonfile = "porori.json" 26 const jsonfile = "porori.json"
19 27
20 type Sinsei struct { 28 type Sinsei struct {
21 No string 29 No string
22 Name string 30 Name string
24 Kbn string 32 Kbn string
25 Ccn string 33 Ccn string
26 Bgn string 34 Bgn string
27 End string 35 End string
28 Term string 36 Term string
37 Kaigo string
29 } 38 }
30 39
31 func (s Sinsei) String() string { 40 func (s Sinsei) String() string {
32 return strings.Join([]string{s.No, s.Name, s.Ymd, s.Kbn, s.Bgn, s.End, s.Term, s.Ccn}, ",") 41 return strings.Join([]string{s.No, s.Name, s.Ymd, s.Kbn, s.Kaigo, s.Bgn, s.End, s.Term, s.Ccn}, ",")
33 } 42 }
34 43
35 func (s Sinsei) TransDate (ymd string) (time.Time, string) { 44 func (s Sinsei) TransDate (ymd string) (time.Time, string) {
36 zero := time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC) 45 zero := time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC)
37 if !strings.HasPrefix(ymd, "20") { 46 if !strings.HasPrefix(ymd, "20") {
77 _, s.Ccn = s.TransDate(s.Ccn) 86 _, s.Ccn = s.TransDate(s.Ccn)
78 bgn, s.Bgn = s.TransDate(s.Bgn) 87 bgn, s.Bgn = s.TransDate(s.Bgn)
79 end, s.End = s.TransDate(s.End) 88 end, s.End = s.TransDate(s.End)
80 89
81 s.Term = fmt.Sprintf("%d", s.CountMonth(bgn, end)) 90 s.Term = fmt.Sprintf("%d", s.CountMonth(bgn, end))
91
92 s.Kaigo = strings.TrimSpace(s.Kaigo)
93 switch s.Kaigo {
94 case "21":
95 s.Kaigo = "介1"
96 case "22":
97 s.Kaigo = "介2"
98 case "23":
99 s.Kaigo = "介3"
100 case "24":
101 s.Kaigo = "介4"
102 case "25":
103 s.Kaigo = "介5"
104 case "12":
105 s.Kaigo = "支1"
106 case "13":
107 s.Kaigo = "支2"
108 case "01":
109 s.Kaigo = ""
110 }
111 s.Kaigo, _, _ = transform.String(japanese.ShiftJIS.NewEncoder(), s.Kaigo)
82 } 112 }
83 113
84 func main() { 114 func main() {
85 115
86 if len(os.Args) != 2 { 116 if len(os.Args) != 2 {
87 fmt.Fprint(os.Stderr, "bat input.") 117 //fmt.Fprint(os.Stderr, "bat input.")
118 fmt.Fprint(os.Stderr, go_source)
88 os.Exit(1) 119 os.Exit(1)
89 } 120 }
90 121
91 // Filter Setting 122 // Filter Setting
92 type YF struct { 123 type YF struct {
109 log.Fatal(err) 140 log.Fatal(err)
110 } 141 }
111 142
112 r := csv.NewReader(strings.NewReader(string(content))) 143 r := csv.NewReader(strings.NewReader(string(content)))
113 144
114 records, err := r.ReadAll() 145 records, err := r.ReadAll() // sorted by Ymd (on MS-Access Query)
115 if err != nil { 146 if err != nil {
116 log.Fatal(err) 147 log.Fatal(err)
117 } 148 }
118 149
119 // Main Proccess 150 // Main Proccess
120 var sinsei []Sinsei 151 var sinsei []Sinsei
152 var seen = make(map[string]bool)
121 153
122 for _, record := range records { 154 for _, record := range records {
123 if record[4] < yf.From || record[4] > yf.To { 155 if record[4] < yf.From || record[4] > yf.To {
124 continue 156 continue
125 } 157 }
130 Ymd: record[2], 162 Ymd: record[2],
131 Kbn: record[3], 163 Kbn: record[3],
132 Ccn: record[4], 164 Ccn: record[4],
133 Bgn: record[5], 165 Bgn: record[5],
134 End: record[6], 166 End: record[6],
135 } 167 Kaigo: record[7],
136 ss.ChangeExpression() 168 }
137
138 sinsei = append(sinsei, ss) 169 sinsei = append(sinsei, ss)
170
171 if record[3] == "02" {
172 seen[record[0]] = true
173 }
174 }
175
176 var prev_sinsei []Sinsei
177 for _, record := range records {
178 if record[4] < yf.From && seen[record[0]] {
179
180 ss := Sinsei{
181 No: record[0],
182 Name: record[1],
183 Ymd: record[2],
184 Kbn: record[3],
185 Ccn: record[4],
186 Bgn: record[5],
187 End: record[6],
188 Kaigo: record[7],
189 }
190 prev_sinsei = append(prev_sinsei, ss)
191 }
139 } 192 }
140 193
141 sort.Slice(sinsei, func(i, j int) bool { 194 sort.Slice(sinsei, func(i, j int) bool {
142 return sinsei[i].Ymd < sinsei[j].Ymd 195 return sinsei[i].Ymd < sinsei[j].Ymd
143 }) 196 })
144 197
145 // Output 198 // Output
146 header := strings.Join([]string{"被保番", "氏名", "申請日", "区分", "開始日", "終了日", "期間", "審査会"}, ",") 199 header := strings.Join([]string{"被保番", "氏名", "申請日", "区分", "要介護度", "開始日", "終了日", "期間", "審査会"}, ",")
147 header, _, _ = transform.String(japanese.ShiftJIS.NewEncoder(), header) 200 header, _, _ = transform.String(japanese.ShiftJIS.NewEncoder(), header)
148 fmt.Println(header) 201 fmt.Println(header)
149 202
150 for _, s := range sinsei { 203 for _, s := range sinsei {
151 fmt.Println(s) 204 var renew string
152 } 205 for _, p := range prev_sinsei {
153 } 206 if s.No == p.No {
154 207 p.ChangeExpression()
208 renew = strings.Join(strings.Split(p.String(), ",")[3:], ",")
209 }
210 }
211 s.ChangeExpression()
212 fmt.Println(s, ",", renew)
213 }
214 }
215