Mercurial > mercurial > hgweb_kaigo.hg.cgi
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 |