Kaynağa Gözat

parse csv value

libf 5 ay önce
ebeveyn
işleme
50d61d507c
2 değiştirilmiş dosya ile 30 ekleme ve 8 silme
  1. 26 1
      cgf/reader/csvreader.go
  2. 4 7
      main.go

+ 26 - 1
cgf/reader/csvreader.go

@@ -3,9 +3,11 @@ package reader
 import (
 	"fmt"
 	"io"
+	"strconv"
 	"strings"
 
 	"git.wecise.com/wecise/util/merrs"
+	"github.com/spf13/cast"
 )
 
 type CSVBlockReader struct {
@@ -47,7 +49,30 @@ func (br *CSVBlockReader) ReadBlock() (block map[string]any, linecount int, err
 		}
 		block = map[string]any{}
 		for i, k := range br.csvkeys {
-			block[k] = values[i]
+			v := values[i]
+			if v != "" {
+				n := cast.ToInt(v)
+				if n != 0 || v == "0" {
+					block[k] = n
+					continue
+				}
+				f := cast.ToFloat64(v)
+				if f != 0 || v == "0" || v == "0.0" || v == ".0" || v == "0." {
+					block[k] = f
+					continue
+				}
+				b := cast.ToBool(v)
+				if v == "true" || v == "false" {
+					block[k] = b
+					continue
+				}
+				s, e := strconv.Unquote(v)
+				if e == nil {
+					block[k] = s
+					continue
+				}
+			}
+			block[k] = v
 		}
 		return
 	}

+ 4 - 7
main.go

@@ -2,7 +2,6 @@ package main
 
 import (
 	"fmt"
-	"os"
 	"time"
 
 	"git.wecise.com/wecise/cgimport/cgf"
@@ -25,17 +24,15 @@ func main() {
 	datapath := mcfg.GetString("datapath", "data")
 	// 并发数
 	parallel := mcfg.GetInt("parallel", 10)
-	// 检查参数,文件目录
-	f, _ := os.Stat(datapath)
-	if f == nil {
-		fmt.Println(`put all data files in directory "` + datapath + `"`)
-		return
-	}
 	// 导入
 	filescount, recordscount, e := cgf.ImportDir(datapath, parallel)
 	if e != nil {
 		panic(e)
 	}
+	if filescount == 0 {
+		fmt.Println(`not found data files in "` + datapath + `"`)
+		return
+	}
 	// 输出统计信息
 	fmt.Println("total import", filescount, "files", recordscount, "records", "in", time.Since(st))
 }