main.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package main
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "io"
  7. "io/ioutil"
  8. "math/rand"
  9. "os"
  10. "os/exec"
  11. "strings"
  12. "time"
  13. )
  14. type Plot struct {
  15. X string `json:"x"`
  16. Y string `json:"y"`
  17. }
  18. type ChartPlot struct {
  19. Title string `json:"title"`
  20. SizeX string `json:"x_size"`
  21. SizeY string `json:"y_size"`
  22. LabelX string `json:"x_label"`
  23. LabelY string `json:"y_label"`
  24. Plots []Plot `json:"plots"`
  25. }
  26. var TITLE string = "{TITLE}"
  27. var LABEL_X string = "{LABEL_X}"
  28. var LABEL_Y string = "{LABEL_Y}"
  29. var OUTPUT string = "{OUTPUT}"
  30. var INPUT string = "{INPUT}"
  31. var LINE string = "{LINE}"
  32. func RandString(n int) string {
  33. rand.Seed(time.Now().UnixNano())
  34. r := []rune("qwertyuiopasdfghjklzxcvbnm1234567890")
  35. b := make([]rune, n)
  36. for i := range b {
  37. b[i] = r[rand.Intn(len(r))]
  38. }
  39. return string(b)
  40. }
  41. func main() {
  42. filename := "xplot_" + RandString(15)
  43. chart := ChartPlot{}
  44. jsonData, errRead := ioutil.ReadFile("./data.json")
  45. if errRead != nil {
  46. fmt.Println(errRead.Error())
  47. }
  48. err := json.Unmarshal([]byte(string(jsonData)), &chart)
  49. if err != nil {
  50. fmt.Println(err.Error())
  51. }
  52. f, _ := os.Create(filename + ".data")
  53. defer f.Close()
  54. for _, p := range chart.Plots {
  55. f.WriteString(p.X + " " + p.Y + ",\n")
  56. }
  57. f.Sync()
  58. buf := bytes.NewBuffer(nil)
  59. tp, _ := os.Open("tp_chart.plot")
  60. io.Copy(buf, tp)
  61. defer tp.Close()
  62. str := string(buf.Bytes())
  63. str = strings.Replace(str, TITLE, "my Chart", 1)
  64. str = strings.Replace(str, LABEL_X, "1024", 1)
  65. str = strings.Replace(str, LABEL_Y, "768", 1)
  66. str = strings.Replace(str, OUTPUT, filename, 1)
  67. str = strings.Replace(str, INPUT, filename, 1)
  68. str = strings.Replace(str, LINE, "donut", 1)
  69. f2, _ := os.Create(filename + ".plot")
  70. defer f2.Close()
  71. f2.WriteString(str)
  72. f2.Sync()
  73. out, errOut := exec.Command("./gnuplot", "./"+ filename + ".plot").Output()
  74. if errOut != nil {
  75. fmt.Println(errOut.Error())
  76. }
  77. fmt.Println(string(out))
  78. }