我正在使用 os.ReadAt() 读取 csv/tsv 文件中的某些行。但是,我不知道该行有多少字节,我只需要读取从我指定的字节偏移量开始的行,直到换行符。
buffer = make([]byte, 46)
os.ReadAt(buffer, 64) //Read at byte offset 64 and put contents in buffer
但是,这仅允许我读取该行的 46 个字节。 有没有办法读取整行直到换行符?
谢谢
更新:
我只是创建一个保存偏移量和行长度的结构..应该在一开始就这样做..我的错
最佳答案
一种方法是使用 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))
关于file - 从字节偏移量开始读取文件的一行,直到新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44528935/