Mercurial > mercurial > hgweb_golang.cgi
comparison src/entai_app/entai_app.go @ 2:451c99c1d9de
implement intaractive mode.
author | pyon@macmini |
---|---|
date | Thu, 13 Oct 2016 06:05:06 +0900 |
parents | 3dafd57af3b1 |
children | ca866a38a6a0 |
comparison
equal
deleted
inserted
replaced
1:3dafd57af3b1 | 2:451c99c1d9de |
---|---|
1 /****************************************************************************/ | 1 /****************************************************************************/ |
2 /* Entai_app.go ( ver 0.2 ) */ | 2 /* Entai_app.go ( ver 0.3 ) */ |
3 /* Last Change: 2016-10-06 Thu 00:49:10. */ | 3 /* Last Change: 2016-10-13 Thu 06:04:09. */ |
4 /****************************************************************************/ | 4 /****************************************************************************/ |
5 | 5 |
6 package main | 6 package main |
7 | 7 |
8 import ( | 8 import ( |
15 "time" | 15 "time" |
16 | 16 |
17 "entai" | 17 "entai" |
18 ) | 18 ) |
19 | 19 |
20 var ver = "0.3" | |
21 var e entai.Entai | |
22 | |
20 func main() { | 23 func main() { |
21 | 24 |
22 var entai entai.Entai | 25 e.Create() |
23 | 26 |
24 // arguments | 27 // arguments |
25 h := flag.Bool( "h", false, "help" ) | 28 h := flag.Bool( "h", false, "help" ) |
26 r := flag.Bool( "r", false, "print rate" ) | 29 r := flag.Bool( "r", false, "print rate" ) |
27 l := flag.Bool( "l", false, "1-liner mode" ) | 30 l := flag.Bool( "l", false, "1-liner mode" ) |
33 p := flag.Int( "p", 8080, "listen port in server mode" ) | 36 p := flag.Int( "p", 8080, "listen port in server mode" ) |
34 | 37 |
35 flag.Parse() | 38 flag.Parse() |
36 | 39 |
37 if flag.NFlag() == 0 { | 40 if flag.NFlag() == 0 { |
38 PrintTile() | 41 printTile() |
39 flag.PrintDefaults() | 42 flag.PrintDefaults() |
40 fmt.Fprint( os.Stderr, "\n" ) | 43 fmt.Fprint( os.Stderr, "\n" ) |
41 os.Exit( 1 ) | 44 os.Exit( 1 ) |
42 } | 45 } |
43 | 46 |
44 if *h { | 47 if *h { |
45 PrintTile() | 48 printTile() |
46 fmt.Fprint( os.Stderr, "1-liner mode:\n" ) | 49 fmt.Fprint( os.Stderr, "1-liner mode:\n" ) |
47 fmt.Fprint( os.Stderr, "> entai_app -l 20160731 20161224 30000\n\n" ) | 50 fmt.Fprint( os.Stderr, "> entai_app -l 20160731 20161224 30000\n\n" ) |
48 fmt.Fprint( os.Stderr, "> entai_app -i -l 20160731 20161224 30000\n\n" ) | 51 fmt.Fprint( os.Stderr, "> entai_app -i -l 20160731 20161224 30000\n\n" ) |
49 fmt.Fprint( os.Stderr, "> entai_app -i -v -l 20160731 20161224 30000\n\n" ) | 52 fmt.Fprint( os.Stderr, "> entai_app -i -v -l 20160731 20161224 30000\n\n" ) |
50 fmt.Fprint( os.Stderr, "server mode:\n" ) | 53 fmt.Fprint( os.Stderr, "server mode:\n" ) |
51 fmt.Fprint( os.Stderr, "> entai_app -s -p 3000\n" ) | 54 fmt.Fprint( os.Stderr, "> entai_app -s -p 3000\n" ) |
52 os.Exit( 0 ) | 55 os.Exit( 0 ) |
53 } | 56 } |
54 | 57 |
55 if *r { | 58 if *r { |
56 PrintTile() | 59 printTile() |
57 fmt.Fprint( os.Stderr, entai.GetRate() ) | 60 fmt.Fprint( os.Stderr, e.GetRate() ) |
58 os.Exit( 0 ) | 61 os.Exit( 0 ) |
59 } | 62 } |
60 | 63 |
61 if *s { | 64 if *s { |
62 *p = 8080 | 65 *p = 8080 |
63 fmt.Fprint( os.Stderr, "server mode is not implemented.\n" ) | 66 fmt.Fprint( os.Stderr, "server mode is not implemented.\n" ) |
64 os.Exit( 0 ) | 67 os.Exit( 0 ) |
65 } | 68 } |
66 | 69 |
67 if *d { | 70 if *d { |
68 PrintTile() | 71 printTile() |
69 //layout := "20060102" | 72 fmt.Print( e.GetRate() ) |
70 //for { | 73 fmt.Print( "-----------\n\n" ) |
71 //} | 74 |
72 os.Exit( 0 ) | 75 for { |
76 fmt.Print( "Input Tax > " ) | |
77 input := bufio.NewScanner( os.Stdin ) | |
78 input.Scan() | |
79 t := input.Text() | |
80 | |
81 fmt.Print( "Input Due > " ) | |
82 input = bufio.NewScanner( os.Stdin ) | |
83 input.Scan() | |
84 d := input.Text() | |
85 | |
86 fmt.Print( "Input Paid > " ) | |
87 input = bufio.NewScanner( os.Stdin ) | |
88 input.Scan() | |
89 p := input.Text() | |
90 | |
91 result, _, err := processEntai( d, p, t ) | |
92 if err != nil { | |
93 fmt.Printf( "%v\n", err ) | |
94 } | |
95 fmt.Printf( " = %d\n\n", result ) | |
96 | |
97 } | |
73 } | 98 } |
74 | 99 |
75 if *l { | 100 if *l { |
76 layout := "20060102" | |
77 | |
78 d, err := time.Parse( layout, flag.Arg(0) ); if err != nil { | |
79 fmt.Fprint( os.Stderr, "bad date format.\n" ) | |
80 os.Exit( 1 ) | |
81 } | |
82 p, err := time.Parse( layout, flag.Arg(1) ); if err != nil { | |
83 fmt.Fprint( os.Stderr, "bad date format.\n" ) | |
84 os.Exit( 1 ) | |
85 } | |
86 | |
87 t, err := strconv.Atoi( flag.Arg(2) ) | |
88 if err != nil || t < 0 { | |
89 fmt.Fprint( os.Stderr, "bad money format.\n" ) | |
90 os.Exit( 1 ) | |
91 } | |
92 | |
93 if *i { | 101 if *i { |
94 fmt.Printf( "%v,%v,%d,", d.Format( layout ), p.Format( layout ), t ) | 102 fmt.Printf( "%s,%s,%s,", flag.Arg(0), flag.Arg(1), flag.Arg(2) ) |
95 } | 103 } |
96 | 104 |
97 // MAIN | 105 result, detail, err := processEntai( flag.Arg(0), flag.Arg(1), flag.Arg(2) ) |
98 entai.Set( d, p, t ) | 106 if err != nil { |
99 result, detail := entai.Result() | 107 fmt.Fprintf( os.Stderr, "%s : %v\n", detail, err ) |
100 // | 108 os.Exit( 1 ) |
101 | 109 } |
102 fmt.Print( result ) | 110 fmt.Print( result ) |
103 | 111 |
104 if *v { | 112 if *v { |
105 fmt.Print( ",", detail ) | 113 fmt.Print( ",", detail ) |
106 } | 114 } |
107 fmt.Print( "\n" ) | 115 fmt.Print( "\n" ) |
116 | |
108 os.Exit( 0 ) | 117 os.Exit( 0 ) |
109 } | 118 } |
110 | 119 |
111 if *b { | 120 if *b { |
121 | |
112 files := flag.Args() | 122 files := flag.Args() |
123 | |
113 if len( files ) == 0 { | 124 if len( files ) == 0 { |
114 fmt.Fprint( os.Stderr, "no input file.\n" ) | 125 fmt.Fprint( os.Stderr, "no input file.\n" ) |
115 os.Exit( 1 ) | 126 os.Exit( 1 ) |
116 } else { | 127 } else { |
128 | |
117 for _, file := range files { | 129 for _, file := range files { |
118 f, err := os.Open( file ); if err != nil { | 130 f, err := os.Open( file ); if err != nil { |
119 fmt.Fprintf( os.Stderr, "cannot open file.[%v]\n", err ) | 131 fmt.Fprintf( os.Stderr, "cannot open file.[%v]\n", err ) |
120 os.Exit( 1 ) | 132 os.Exit( 1 ) |
121 } | 133 } |
134 | |
122 input := bufio.NewScanner( f ) | 135 input := bufio.NewScanner( f ) |
123 b := bufio.NewWriter( os.Stdout ) | 136 b := bufio.NewWriter( os.Stdout ) |
124 for input.Scan() { | 137 for input.Scan() { |
125 s := strings.Split( input.Text(), "," ) | 138 s := strings.Split( input.Text(), "," ) |
126 fmt.Fprint( b, s[0] ) | 139 if strings.HasPrefix( input.Text(), "#" ) { |
140 if strings.Contains( input.Text(), "@@" ) { | |
141 buf := strings.Replace( input.Text(), "#", "", 1 ) | |
142 buf = strings.Replace( buf, "@@", "", 1 ) | |
143 fmt.Fprintf( b, "%s\n", buf ) | |
144 } | |
145 continue | |
146 } | |
147 result, detail, err := processEntai( s[0], s[1], s[2] ) | |
148 if err != nil { | |
149 fmt.Fprintf( os.Stderr, "%s : %v\n", detail, err ) | |
150 os.Exit( 1 ) | |
151 } | |
152 fmt.Fprintf( b, "%s,%s,%s,%d,%s\n", s[0], s[1], s[2], result, detail ) | |
127 } | 153 } |
128 b.Flush() | 154 b.Flush() |
129 f.Close() | 155 f.Close() |
130 } | 156 } |
131 os.Exit( 0 ) | 157 os.Exit( 0 ) |
132 } | 158 } |
133 } | 159 } |
134 } | 160 } |
135 | 161 |
136 func PrintTile() { | 162 func processEntai( due, paid, tax string ) ( int, string, error ) { |
137 fmt.Fprint( os.Stderr, "\n==================================================\n" ) | 163 d, msg, err := validDate( due ); if err != nil { |
138 fmt.Fprint( os.Stderr, " Entai_app ver 0.2 ( 2016.10.09 ) - since 2016\n" ) | 164 return -1, msg, err |
139 fmt.Fprint( os.Stderr, "==================================================\n\n" ) | 165 } |
140 } | 166 p, msg, err := validDate( paid ); if err != nil { |
141 | 167 return -1, msg, err |
168 } | |
169 | |
170 t, msg, err := validInt( tax ); if err != nil { | |
171 return -1, msg, err | |
172 } | |
173 | |
174 e.Set( d, p, t ) | |
175 result, detail := e.Result() | |
176 | |
177 return result, detail, nil | |
178 } | |
179 | |
180 func validDate( s string ) ( time.Time, string, error ) { | |
181 layout := "20060102" | |
182 t, err := time.Parse( layout, s ); if err != nil { | |
183 return t, "bad date format.", err | |
184 } | |
185 return t, "", nil | |
186 } | |
187 | |
188 func validInt( s string ) ( int, string, error ) { | |
189 i, err := strconv.Atoi( s ) | |
190 if err != nil || i < 0 { | |
191 return -1, "bad money format.", err | |
192 } | |
193 return i, "", nil | |
194 } | |
195 | |
196 func printTile() { | |
197 fmt.Fprint( os.Stderr, "\n==================================================\n" ) | |
198 fmt.Fprintf( os.Stderr, " Entai_app ver %s ( 2016.10.09 ) - since 2016\n", ver ) | |
199 fmt.Fprint( os.Stderr, "==================================================\n\n" ) | |
200 } | |
201 |