我有一个csv文件,想阅读:标头名称字段类型所以,我写了以下内容:package mainimport ( "encoding/csv" "fmt" "os" "log" "reflect" "strconv")func main() { filePath := "./file.csv" headerNames := make(map[int]string) headerTypes := make(map[int]string) // Load a csv file. f, _ := os.Open(filePath) // Create a new reader. r := csv.NewReader(f) // Read first row only header, err := r.Read() checkError("Some other error occurred", err) // Add mapping: Column/property name --> record index for i, v := range header { headerNames[i] = v } // Read second row record, err := r.Read() checkError("Some other error occurred", err) // Check record fields types for i, v := range record { var value interface{} if value, err = strconv.Atoi(v); err != nil { if value, err = strconv.ParseFloat(v, 64); err != nil { if value, err = strconv.ParseBool(v); err != nil { if value, err = strconv.ParseBool(v); err != nil { // <== How to do this with unknown layout // Value is a string headerTypes[i] = "string" value = v fmt.Println(reflect.TypeOf(value), reflect.ValueOf(value)) } else { // Value is a timestamp headerTypes[i] = "time" fmt.Println(reflect.TypeOf(value), reflect.ValueOf(value)) } }
1 回答
慕斯王
TA贡献1864条经验 获得超2个赞
我找到了使用这个包的解决方案:github.com/araddon/dateparse
// Normal parse. Equivalent Timezone rules as time.Parse()
t, err := dateparse.ParseAny("3/1/2014")
// Parse Strict, error on ambigous mm/dd vs dd/mm dates
t, err := dateparse.ParseStrict("3/1/2014")
> returns error
// Return a string that represents the layout to parse the given date-time.
layout, err := dateparse.ParseFormat("May 8, 2009 5:57:51 PM")
> "Jan 2, 2006 3:04:05 PM"
- 1 回答
- 0 关注
- 87 浏览
添加回答
举报
0/150
提交
取消