我有一个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 关注
- 152 浏览
添加回答
举报
0/150
	提交
		取消
	