1 回答

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
CSV沒(méi)有“可變長(zhǎng)度數(shù)組”的概念,它只是一個(gè)以逗號(hào)分隔的值列表。RFC 4180中描述了該格式,這正是該encoding/csv
包所實(shí)現(xiàn)的。
您只能從 CSV 行中獲取字符串切片。如何解釋這些價(jià)值觀取決于您。如果您想進(jìn)一步拆分?jǐn)?shù)據(jù),則必須對(duì)數(shù)據(jù)進(jìn)行后處理。
您所擁有的內(nèi)容可以簡(jiǎn)單地與regexp
包一起處理,例如
var r = regexp.MustCompile(`'[^']*'`)
func split(s string) []string {
? ? parts := r.FindAllString(s, -1)
? ? for i, part := range parts {
? ? ? ? parts[i] = part[1 : len(part)-1]
? ? }
? ? return parts
}
測(cè)試它:
s := `['one', 'two', 'three']`
fmt.Printf("%q\n", split(s))
s = `[]`
fmt.Printf("%q\n", split(s))
s = `['o,ne', 't,w,o', 't,,hree']`
fmt.Printf("%q\n", split(s))
輸出(在Go Playground上嘗試):
["one" "two" "three"]
[]
["o,ne" "t,w,o" "t,,hree"]
使用此split()函數(shù),處理可能如下所示:
for _, line := range lines {
? ? data := CsvLine{
? ? ? ? Id:? ? ?line[0],
? ? ? ? Array1: split(line[1]),
? ? ? ? Array2: split(line[2]),
? ? }
? ? fmt.Printf("%+v\n", data)
}
輸出(在Go Playground上嘗試):
{Id:594385903dss?Array1:[fhjdsk?dfjdskl?fkdsjgooiertio]?Array2:[jflkdsjfl?fkjdlsfjdslkfjldks]} {Id:87764385903dss?Array1:[cxxc?wqeewr?opi?iy?qw]?Array2:[cvbvc?gf?mnb?ewr]}
- 1 回答
- 0 關(guān)注
- 163 瀏覽
添加回答
舉報(bào)