file - 从字节偏移量开始读取文件的一行,直到新行

标签 file go byte reader

我正在使用 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/

相关文章:

regex - Linux递归地用下划线替换所有目录的句点和除最后一个句点之外的所有文件

android - android 中 getExternalCacheDir 与 getExternalFilesDir 之间的区别

file - 如何将文件保存在内存中——在服务器之间传输文件而不将它们存储在本地

mongodb - 在 Golang 的 mongodb 中插入结构

python - 具有非标准字符到 int 的十六进制转储(字节数组)

java - 将字符串数组转换为字节数组(java)

java - HashMap 困惑。读取/写入文件。 java

ruby-on-rails - 多态回形针覆盖同名文件

go - 如何修复 Mac 上的 dep ensure 错误 'cannot stat file'?

将 C 字节数组转换为 long long