我正在使用os.ReadAt()来读取csv / tsv文件中的某些行。但是,我不知道该行中有多少字节,我只需要读取从指定的字节偏移开始的行,直到换行。
buffer = make([]byte, 46)
os.ReadAt(buffer, 64) //Read at byte offset 64 and put contents in buffer
然而,这只允许我读取该行的46个字节。 有没有办法在换行前阅读整行?
由于
更新
我只是创建一个包含偏移量和行长度的结构。应该在开始时做到这一点..我的不好
答案 0 :(得分:1)
一种方法是使用bufio
pkg。这方面的一个例子如下:
fd, err := os.Open("your_file.csv")
if err != nil { //error handler
log.Println(err)
return
}
reader := bufio.NewReader(fd) // creates a new reader
_, err = reader.Discard(64) // discard the following 64 bytes
if err != nil { // error handler
log.Println(err)
return
}
// use isPrefix if is needed, this example doesn't use it
// read line until a new line is found
line, _, err := reader.ReadLine()
if err != nil { // error handler
log.Println(err)
return
}
fmt.Println(string(line))
读取该行的另一种方法是,您可以使用fd.Seek(64,0)
跳转到特定的字节,如
_, err = fd.Seek(64, 0) // Set the current position for the fd
if err != nil { // error handler
log.Println(err)
return
}
然后使用读者阅读该行。
reader := bufio.NewReader(fd)
line, _, err := reader.ReadLine()
if err != nil {
log.Println(err)
return
}
fmt.Println(string(line))