annotate src/matsu/matsu.go @ 60:058fb0a2cda8

fix eraline.
author pyon@macmini
date Fri, 14 Aug 2020 03:31:29 +0900
parents efa8836fd428
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
32
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
1 /*
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
2 Matsu2
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
3 訪問調査依頼一覧出力プログラム
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
4 original written by GNU-awk
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
5
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
6 Last Change: 2019-05-17 金 15:39:21.
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
7 */
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
8 package main
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
9
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
10 /*
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
11 #cgo LDFLAGS: -L. -lxdwapi -static
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
12 #include <stdio.h>
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
13 #include <string.h>
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
14
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
15 #include <windows.h>
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
16 #include <xdw_api.h>
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
17
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
18 char* xdw_x2t(const char* file) {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
19 char in_path[_MAX_PATH];
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
20 _fullpath(in_path, file, _MAX_PATH);
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
21
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
22 XDW_DOCUMENT_HANDLE h = NULL; // 文書ハンドルを開く
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
23 XDW_OPEN_MODE_EX mode = {sizeof(XDW_OPEN_MODE_EX), XDW_OPEN_READONLY, XDW_AUTH_NODIALOGUE};
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
24 if (XDW_OpenDocumentHandle(in_path, &h, (XDW_OPEN_MODE*)&mode)) {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
25 printf("Error: cannot open %s\n", file);
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
26 return NULL;
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
27 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
28
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
29 XDW_DOCUMENT_INFO info = {sizeof(XDW_DOCUMENT_INFO), 0, 0, 0}; // 総ページ数を得る
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
30 XDW_GetDocumentInformation(h, &info);
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
31 int nPage = info.nPages;
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
32
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
33 // メイン処理
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
34 char *lpszvalue, *all_lpszvalue;
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
35 long datasize[9999];
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
36 for (int i=1; i<=nPage; i++) {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
37 datasize[i] = XDW_GetPageTextToMemory(h, i, NULL, 0, NULL);
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
38 datasize[0] += datasize[i];
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
39 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
40 datasize[0] += nPage - 1; // for "\n"
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
41 all_lpszvalue = (char*)malloc(sizeof(char)*datasize[0]);
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
42 all_lpszvalue[0] = '\0';
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
43 for (int i=1; i<=nPage; i++) {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
44 if (i<nPage) datasize[i]++; // for "\n"
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
45 lpszvalue = (char*)malloc(sizeof(char)*(datasize[i]));
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
46 XDW_GetPageTextToMemory(h, i, lpszvalue, datasize[i], NULL);
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
47 strcat(all_lpszvalue, lpszvalue);
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
48 if (i<nPage) strcat(all_lpszvalue, "\n");
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
49 free(lpszvalue);
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
50 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
51
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
52 XDW_CloseDocumentHandle(h, NULL); // 文書ハンドルを閉じる
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
53 return all_lpszvalue;
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
54 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
55 */
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
56 import "C"
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
57 import (
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
58 "bufio"
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
59 "fmt"
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
60 "flag"
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
61 "log"
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
62 "os"
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
63 "regexp"
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
64 "strings"
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
65
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
66 "golang.org/x/text/encoding/japanese"
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
67 "golang.org/x/text/transform"
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
68 )
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
69
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
70 func main() {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
71 infile := flag.String("i", "KBPC116G.xdw", "input file")
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
72 outfile := flag.String("o", "-", "output file")
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
73 utf8 := flag.Bool("w", false, "write utf8")
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
74 verbose := flag.Bool("v", false, "verbose")
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
75 vverbose := flag.Bool("vv", false, "very verbose")
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
76 version := flag.Bool("V", false, "print version")
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
77 flag.Parse()
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
78
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
79 if *version {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
80 fmt.Println("matsu2 - v1.0")
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
81 os.Exit(0)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
82 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
83 if *vverbose {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
84 *verbose = true
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
85 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
86
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
87 s := C.GoString(C.xdw_x2t(C.CString(*infile)))
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
88 r := strings.NewReader(s)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
89 tr := transform.NewReader(r, japanese.ShiftJIS.NewDecoder())
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
90
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
91 f := os.Stdout
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
92 if *outfile != "-" {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
93 var err error
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
94 f, err = os.Create(*outfile)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
95 if err != nil {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
96 log.Fatal(err)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
97 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
98 defer f.Close()
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
99 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
100
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
101 if *verbose {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
102 fmt.Fprintln(os.Stderr, "input: " + *infile)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
103 fmt.Fprintln(os.Stderr, "output: " + *outfile)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
104 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
105
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
106 var rehhsno = regexp.MustCompile(`0[1238]\d{8}`)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
107 var redate = regexp.MustCompile(`((明治)|(大正)|(昭和)|(平成)|(令和)).{1,2}年.\d月.\d日`)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
108 var recity = regexp.MustCompile(`(((平成)|(令和)).{1,2}年.\d月.\d日){2}...`)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
109 var rename = regexp.MustCompile(`0[1238]\d{8}.*((平成)|(令和)).{1,2}年.\d月.\d日`)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
110 var rezensp = regexp.MustCompile(` {2,}`)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
111
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
112 w := bufio.NewWriter(f)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
113 if !*utf8 {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
114 tw := transform.NewWriter(f, japanese.ShiftJIS.NewEncoder())
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
115 w = bufio.NewWriter(tw)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
116 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
117 header := []string{"申請日", "被保番", "氏名", "生年月日", "市町村", "-", "-", "-", "依頼日"}
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
118 fmt.Fprintln(w, strings.Join(header, ","))
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
119
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
120 var p, q int
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
121 var req string
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
122 buf := bufio.NewScanner(tr)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
123 for buf.Scan() {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
124 str := strings.TrimRight(buf.Text(), " ")
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
125 if strings.HasSuffix(str, "依頼書") {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
126 req = redate.FindString(str)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
127 req = strings.Replace(req, " ", "", -1)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
128 if *verbose {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
129 p++
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
130 fmt.Fprintf(os.Stderr, "req: %d\n", p)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
131 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
132 } else {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
133 row := strings.Split(str, "〒")
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
134 for i := 0; i < len(row) - 1; i++ {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
135 var app, hhsno, name, birth, city, empty string
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
136
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
137 d := redate.FindAllString(row[i], -1)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
138 if len(d) > 0 {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
139 birth = strings.Replace(d[0], " ", "", -1)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
140 app = strings.Replace(d[1], " ", "", -1)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
141 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
142 if rehhsno.MatchString(row[i]) {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
143 hhsno = "=\"" + rehhsno.FindString(row[i]) + "\""
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
144 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
145 if rename.MatchString(row[i]) {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
146 n := []rune(rename.FindString(row[i]))
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
147 kana := string(n[10:36])
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
148 kana = strings.Trim(kana, " ")
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
149 name = string(n[37:55])
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
150 name = strings.Trim(name, " ")
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
151 name = rezensp.ReplaceAllString(name, "")
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
152 name += "(" + kana + ")"
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
153 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
154 if recity.MatchString(row[i]) {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
155 c := []rune(recity.FindString(row[i]))
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
156 city = string(c[len(c)-3:])
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
157 city = strings.Replace(city, "仙北郡", "美郷町", -1)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
158 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
159
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
160 if hhsno != "" {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
161 fields := []string{app, hhsno, name, birth, city, empty, empty, empty, req}
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
162 fmt.Fprintln(w, strings.Join(fields, ","))
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
163 if *vverbose {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
164 fmt.Fprintf(os.Stderr, " %02d: %s\n", i + 1, hhsno[2:12])
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
165 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
166 q++
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
167 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
168 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
169 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
170 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
171
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
172 if *verbose {
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
173 fmt.Fprintf(os.Stderr, "finish [%d customer]\n", q)
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
174 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
175 w.Flush()
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
176 }
efa8836fd428 add encoding japanse & rune sample.
pyon@macmini
parents:
diff changeset
177