main.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package main
  2. import (
  3. "os"
  4. "fmt"
  5. "time"
  6. "code.google.com/p/getopt"
  7. "devel.mephi.ru/dyokunev/voltlogger_parser/voltloggerParser"
  8. )
  9. type printRow_arg struct {
  10. outputPath string
  11. }
  12. func handleHeader(h voltloggerParser.VoltloggerDumpHeader, arg_iface interface{}) (error) {
  13. arg := arg_iface.(*printRow_arg)
  14. if (arg.outputPath == "") {
  15. now := time.Now()
  16. year, month, day := now.Date()
  17. hour, min, sec := now.Clock()
  18. arg.outputPath = fmt.Sprintf("%v_%v-%02v-%02v_%02v:%02v:%02v.csv", h.DeviceName, year, int(month), day, hour, min, sec)
  19. }
  20. return nil
  21. }
  22. func printRow(ts int64, row []int, h voltloggerParser.VoltloggerDumpHeader, arg_iface interface{}) (error) {
  23. fmt.Printf("%v", ts)
  24. rowLen := len(row)
  25. for i:=0; i < rowLen; i++ {
  26. fmt.Printf("\t%v", row[i])
  27. }
  28. fmt.Printf("\n")
  29. return nil
  30. }
  31. func main() {
  32. var dumpPath string
  33. var noHeadersStr string
  34. var noHeaders bool
  35. var printRow_arg printRow_arg
  36. getopt.StringVar(&dumpPath, 'i', "dump-path")
  37. getopt.StringVar(&printRow_arg.outputPath, 'o', "output-path").SetOptional()
  38. getopt.StringVar(&noHeadersStr, 'n', "no-headers").SetOptional()
  39. getopt.Parse()
  40. if (getopt.NArgs() > 0 || dumpPath == "") {
  41. getopt.Usage()
  42. os.Exit(-2)
  43. }
  44. switch (noHeadersStr) {
  45. case "1", "yes", "true":
  46. noHeaders = true
  47. break
  48. }
  49. err := voltloggerParser.ParseVoltloggerDump(dumpPath, noHeaders, handleHeader, printRow, &printRow_arg)
  50. if (err != nil) {
  51. fmt.Printf("Cannot parse the dump: %v\n", err.Error())
  52. os.Exit(-1)
  53. }
  54. fmt.Printf("%v %v\n", dumpPath, printRow_arg)
  55. }