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