tablePrint.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package dbBase
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "log"
  6. "strconv"
  7. "xg_once_query/setting"
  8. "github.com/jedib0t/go-pretty/v6/table"
  9. )
  10. func TablePrint(rows *sql.Rows, colHeads []string, pvals []interface{}) {
  11. //log.Println("TablePrint")
  12. // 表列名
  13. t := table.NewWriter()
  14. var header table.Row
  15. for _, v := range colHeads {
  16. header = append(header, v)
  17. }
  18. t.AppendHeader(header)
  19. for rows.Next() {
  20. err := rows.Scan(pvals...)
  21. if err != nil {
  22. //log.Fatal(err)
  23. log.Println(err)
  24. break
  25. }
  26. var row table.Row
  27. for v := range pvals {
  28. row = append(row, string(*(pvals[v].(*[]byte))))
  29. // log.Println("len row : ", len(row))
  30. // log.Println("row", row)
  31. }
  32. t.AppendRow(row)
  33. }
  34. //输出命令行表格
  35. fmt.Println(t.Render())
  36. }
  37. func TablePrints(rows *sql.Rows, colHeads []string, pvals []interface{}) {
  38. //输出表列名参数
  39. //n group组 = colHeads / cplLimit 49 ... / 5 = 9 余4 cols[n group组:cplLimit]
  40. colLimit, _ := strconv.Atoi(setting.SInfo.ColLimit)
  41. if len(colHeads) < colLimit {
  42. colLimit = len(colHeads)
  43. }
  44. group := len(colHeads) / colLimit
  45. remainder := len(colHeads) % colLimit
  46. colLimitTmp := colLimit
  47. colStart := 0
  48. //输出表数据
  49. var pv2 [][]string
  50. for rows.Next() {
  51. err := rows.Scan(pvals...)
  52. if err != nil {
  53. //log.Fatal(err)
  54. log.Println(err)
  55. }
  56. copiedSlice := make([]string, len(pvals))
  57. for i, val := range pvals {
  58. // 使用 interface{} 类型进行深拷贝,并将结果存储到 copiedSlice 中
  59. copiedSlice[i] = string(*val.(*[]byte))
  60. }
  61. pv2 = append(pv2, copiedSlice)
  62. }
  63. for i := 0; i < group+1; i++ {
  64. colSTmp := colStart
  65. colLTmp := colLimitTmp
  66. //表列名
  67. t := table.NewWriter()
  68. var header table.Row
  69. colTmp := colHeads[colStart:colLimitTmp]
  70. for _, v := range colTmp {
  71. header = append(header, v)
  72. }
  73. t.AppendHeader(header)
  74. //表数据
  75. for v := range pv2 {
  76. var row table.Row
  77. abc := pv2[v][colSTmp:colLTmp]
  78. for v2 := range abc {
  79. row = append(row, abc[v2])
  80. }
  81. t.AppendRow(row)
  82. }
  83. colStart = colLimitTmp
  84. if colLimitTmp < len(colHeads)-remainder {
  85. colLimitTmp += colLimit
  86. } else {
  87. colLimitTmp = len(colHeads)
  88. }
  89. //输出命令行表格
  90. fmt.Println(t.Render())
  91. }
  92. }