view src/entai_app/entai_app.go @ 1:3dafd57af3b1

bug-fix.
author pyon@macmini
date Thu, 06 Oct 2016 00:55:26 +0900
parents de451fa0c9cd
children 451c99c1d9de
line wrap: on
line source

/****************************************************************************/
/* Entai_app.go ( ver 0.2 )                                                 */
/*                                    Last Change: 2016-10-06 Thu 00:49:10. */
/****************************************************************************/

package main

import (
    "bufio"
    "flag"
    "fmt"
    "os"
    "strconv"
    "strings"
    "time"

    "entai"
)

func main() {

    var entai entai.Entai

    // arguments
    h := flag.Bool( "h", false, "help" )
    r := flag.Bool( "r", false, "print rate" )
    l := flag.Bool( "l", false, "1-liner mode" )
    b := flag.Bool( "b", false, "batch mode" )
    v := flag.Bool( "v", false, "print verbose in 1-liner mode")
    i := flag.Bool( "i", false, "print input value in 1-liner mode")
    d := flag.Bool( "d", false, "intaracitve mode")
    s := flag.Bool( "s", false, "server mode" )
    p := flag.Int( "p", 8080, "listen port in server mode" )

    flag.Parse()

    if flag.NFlag() == 0 {
        PrintTile()
        flag.PrintDefaults()
        fmt.Fprint( os.Stderr, "\n" )
        os.Exit( 1 )
    }

    if *h {
        PrintTile()
        fmt.Fprint( os.Stderr, "1-liner mode:\n" )
        fmt.Fprint( os.Stderr, "> entai_app -l 20160731 20161224 30000\n\n" )
        fmt.Fprint( os.Stderr, "> entai_app -i -l 20160731 20161224 30000\n\n" )
        fmt.Fprint( os.Stderr, "> entai_app -i -v -l 20160731 20161224 30000\n\n" )
        fmt.Fprint( os.Stderr, "server mode:\n" )
        fmt.Fprint( os.Stderr, "> entai_app -s -p 3000\n" )
        os.Exit( 0 )
    }

	if *r {
        PrintTile()
		fmt.Fprint( os.Stderr, entai.GetRate() )
        os.Exit( 0 )
	}

    if *s {
        *p = 8080
        fmt.Fprint( os.Stderr, "server mode is not implemented.\n" )
        os.Exit( 0 )
    }

    if *d {
        PrintTile()
        //layout := "20060102"
        //for {
        //}
        os.Exit( 0 )
    }

    if *l {
        layout := "20060102"

        d, err := time.Parse( layout, flag.Arg(0) ); if err != nil {
            fmt.Fprint( os.Stderr, "bad date format.\n" )
            os.Exit( 1 )
        }
        p, err := time.Parse( layout, flag.Arg(1) ); if err != nil {
            fmt.Fprint( os.Stderr, "bad date format.\n" )
            os.Exit( 1 )
        }

        t, err := strconv.Atoi( flag.Arg(2) )
		if err != nil || t < 0 {
            fmt.Fprint( os.Stderr, "bad money format.\n" )
            os.Exit( 1 )
        }

        if *i {
            fmt.Printf( "%v,%v,%d,", d.Format( layout ), p.Format( layout ), t )
        }

		// MAIN
		entai.Set( d, p, t )
        result, detail := entai.Result()
		//

        fmt.Print( result )

        if *v {
            fmt.Print( ",", detail )
        }
        fmt.Print( "\n" )
        os.Exit( 0 )
    }

    if *b {
        files := flag.Args()
        if len( files ) == 0 {
            fmt.Fprint( os.Stderr, "no input file.\n" )
            os.Exit( 1 )
        } else {
            for _, file := range files {
                f, err := os.Open( file ); if err != nil {
                    fmt.Fprintf( os.Stderr, "cannot open file.[%v]\n", err )
                    os.Exit( 1 )
                }
                input := bufio.NewScanner( f )
                b := bufio.NewWriter( os.Stdout )
                for input.Scan() {
                    s := strings.Split( input.Text(), "," )
                    fmt.Fprint( b, s[0] )
                }
                b.Flush()
                f.Close()
            }
            os.Exit( 0 )
        }
    }
}

func PrintTile() {
    fmt.Fprint( os.Stderr, "\n==================================================\n" )
    fmt.Fprint( os.Stderr, "  Entai_app ver 0.2  ( 2016.10.09 ) - since 2016\n" )
    fmt.Fprint( os.Stderr, "==================================================\n\n" )
}