Mercurial > mercurial > hgweb_golang.cgi
diff src/kaigo/Porori/src2/porori.go @ 65:0369656be06c default tip
many changes.
author | pyon@macmini |
---|---|
date | Fri, 20 May 2022 06:30:34 +0900 |
parents | 34a474fb83c3 |
children |
line wrap: on
line diff
--- a/src/kaigo/Porori/src2/porori.go Fri Dec 25 20:48:01 2020 +0900 +++ b/src/kaigo/Porori/src2/porori.go Fri May 20 06:30:34 2022 +0900 @@ -1,10 +1,13 @@ +/* + Last Change: 2021-09-07 火 14:39:09. +*/ package main import ( + "bufio" "encoding/csv" "encoding/json" "fmt" - "io/ioutil" "log" "os" "sort" @@ -25,11 +28,36 @@ Ccn string Bgn string End string - Term string + Hist string + ReqI string + Acc string + ReqC string + Visit string + Remark string } func (s Sinsei) String() string { - return strings.Join([]string{s.No, s.Name, s.Ymd, s.Kbn, s.Bgn, s.End, s.Term, s.Ccn}, ",") + s.ChangeExpression() + + var ymd, ccn, bgn, end, reqi, acc, reqc, visit, remark time.Time + ymd, s.Ymd = s.TransDate(s.Ymd) + ccn, s.Ccn = s.TransDate(s.Ccn) + bgn, s.Bgn = s.TransDate(s.Bgn) + end, s.End = s.TransDate(s.End) + reqi, s.ReqI = s.TransDate(s.ReqI) + acc, s.Acc = s.TransDate(s.Acc) + reqc, s.ReqC = s.TransDate(s.ReqC) + visit, s.Visit = s.TransDate(s.Visit) + remark, s.Remark = s.TransDate(s.Remark) + + term := fmt.Sprintf("%d", s.CalcTerm(bgn, end)) + ridays := fmt.Sprintf("%d", s.CountDay(ymd, reqi)) + adays := fmt.Sprintf("%d", s.CountDay(reqi, acc)) + rcdays := fmt.Sprintf("%d", s.CountDay(ymd, reqc)) + vdays := fmt.Sprintf("%d", s.CountDay(reqc, visit)) + tdays := fmt.Sprintf("%d", s.CountDay(visit, remark)) + rdays := fmt.Sprintf("%d", s.CountDay(ymd, ccn)) + return strings.Join([]string{s.No, s.Name, s.Ymd, s.Kbn, s.Bgn, s.End, term, s.Ccn, rdays, s.ReqI, ridays, s.Acc, adays, s.ReqC, rcdays, s.Visit, vdays, s.Remark, tdays}, ",") } func (s Sinsei) TransDate (ymd string) (time.Time, string) { @@ -41,8 +69,8 @@ return t, t.Format(" 2006-01-02") } -func (s Sinsei) CountMonth(bgn, end time.Time) int { - if bgn.IsZero() { +func (s Sinsei) CalcTerm(bgn, end time.Time) int { + if bgn.IsZero() || end.IsZero() { return 0 } @@ -53,6 +81,25 @@ return m } +func (s Sinsei) CountDay(bgn, end time.Time) int { + if bgn.IsZero() || end.IsZero() { + return -9999 + } + + if bgn.Year() == end.Year() { + return end.YearDay() - bgn.YearDay() + } + if end.Year() - bgn.Year() == 1 { + d := 365 - bgn.YearDay() + end.YearDay() + if bgn.Year() % 4 == 0 { // can use 2001 - 2099 + d++ + } + return d + } + + return -9999 +} + func (s *Sinsei) ChangeExpression() { s.No = "=\"" + strings.TrimSpace(s.No) + "\"" @@ -71,19 +118,29 @@ s.Kbn = "証交" } s.Kbn, _, _ = transform.String(japanese.ShiftJIS.NewEncoder(), s.Kbn) +} - var bgn, end time.Time - _, s.Ymd = s.TransDate(s.Ymd) - _, s.Ccn = s.TransDate(s.Ccn) - bgn, s.Bgn = s.TransDate(s.Bgn) - end, s.End = s.TransDate(s.End) +func read_line(file string) ([]string, error) { + f, err := os.Open(file) + if err != nil { + return nil, err + } + defer f.Close() - s.Term = fmt.Sprintf("%d", s.CountMonth(bgn, end)) + var s []string + scanner := bufio.NewScanner(f) + for scanner.Scan() { + s = append(s, scanner.Text()) + } + if err := scanner.Err(); err != nil { + return nil, err + } + return s, nil } func main() { - if len(os.Args) != 2 { + if len(os.Args) != 5 { fmt.Fprint(os.Stderr, "bat input.") os.Exit(1) } @@ -95,7 +152,7 @@ } var yf YF - content, err := ioutil.ReadFile(jsonfile) + content, err := os.ReadFile(jsonfile) if err != nil { log.Fatal(err) } @@ -104,7 +161,7 @@ } // Read CSV - content, err = ioutil.ReadFile(os.Args[1]) + content, err = os.ReadFile(os.Args[1]) // nintei.csv if err != nil { log.Fatal(err) } @@ -116,25 +173,68 @@ log.Fatal(err) } + ikensho, err := read_line(os.Args[2]) // i.csv + if err != nil { + log.Fatal(err) + } + chosa, err := read_line(os.Args[3]) // c.csv + if err != nil { + log.Fatal(err) + } + + remark, err := read_line(os.Args[4]) // t.csv + if err != nil { + log.Fatal(err) + } + // Main Proccess var sinsei []Sinsei for _, record := range records { - if record[4] < yf.From || record[4] > yf.To { + if record[5] < yf.From || record[5] > yf.To { continue } + var riymd, aymd, rcymd, vymd string + key := strings.Join([]string{record[0], record[1]}, ",") + for _, i := range ikensho { + if strings.HasPrefix(i, key) { + riymd = strings.Split(i, ",")[2] + aymd = strings.Split(i, ",")[3] + break + } + } + for _, c := range chosa { + if strings.HasPrefix(c, key) { + rcymd = strings.Split(c, ",")[2] + vymd = strings.Split(c, ",")[3] + break + } + } + var rymd string + for _, t := range remark { + h := strings.TrimSpace(record[0]) + c := strings.Split(t, ",") + if strings.EqualFold(h, c[0]) && strings.EqualFold(record[3], c[1]) { + rymd = c[2] + break + } + } ss := Sinsei{ No: record[0], - Name: record[1], - Ymd: record[2], - Kbn: record[3], - Ccn: record[4], - Bgn: record[5], - End: record[6], + Hist: record[1], + Name: record[2], + Ymd: record[3], + Kbn: record[4], + Ccn: record[5], + Bgn: record[6], + End: record[7], + ReqI: riymd, + Acc: aymd, + ReqC: rcymd, + Visit: vymd, + Remark: rymd, } - ss.ChangeExpression() - sinsei = append(sinsei, ss) } @@ -143,10 +243,16 @@ }) // Output - header := strings.Join([]string{"被保番", "氏名", "申請日", "区分", "開始日", "終了日", "期間", "審査会"}, ",") + header := strings.Join([]string{"被保番", "氏名", "申請日", "区分", "開始日", "終了日", "期間", "審査会", "日数", "意見書依頼", "日数", "意見書入手", "日数", "調査依頼", "日数", "調査", "日数", "特記", "日数"}, ",") header, _, _ = transform.String(japanese.ShiftJIS.NewEncoder(), header) fmt.Println(header) + /* + for i, s := range sinsei { + fmt.Print(s) + fmt.Printf(",=\"0\"&A%d\n", i + 2) + } + */ for _, s := range sinsei { fmt.Println(s) }