2 回答
TA贡献1851条经验 获得超3个赞
谢谢你的帮助,
我使用 file.Seek(x,0) 像这样的代码:
file, err := os.Open("data.bin")
check(err)
defer file.Close()
o1, err := file.Seek(110, 0) <--- first position
check(err)
_ip := make([]byte, 15)
ipRead, err := file.Read(_ip)
clean_ip := strings.ReplaceAll(string(_ip[:]), " ", " ")
o2, err := file.Seek(21, io.SeekCurrent)
check(err)
_user := make([]byte, 15)
userRead, err := file.Read(_user)
clean_user := strings.ReplaceAll(string(_user[:]), " ", " ")
o3, err := file.Seek(532, 0) <---- Second position
check(err)
_pwd := make([]byte, 20)
pwdRead, err := file.Read(_pwd)
clean_pwd := strings.ReplaceAll(string(_pwd[:]), " ", " ")
它的工作但不干净
TA贡献2012条经验 获得超12个赞
一种方法是迭代文件。本质上,您可以重新实现该strings程序。它类似于使用bufio#Scanner.Scan,但您需要迭代空字节而不是换行符。您可以使用 bufio#Scanner.Split,Go 甚至提供了一些预制功能。
我采用了ScanLines并修改为使用空字节而不是换行符。此外,也 ScanLines返回空行,所以我添加了一个空文本检查:
package main
import (
"bufio"
"strings"
)
func null(b []byte, eof bool) (int, []byte, error) {
if eof { return 0, nil, nil }
for n := range b {
if b[n] == 0 {
return n+1, b[:n], nil
}
}
return len(b), b, nil
}
func main() {
s := bufio.NewScanner(strings.NewReader("March\x00April\x00May\x00\x00June"))
s.Split(null)
for s.Scan() {
if s.Text() != "" {
println(s.Text())
}
}
}
- 2 回答
- 0 关注
- 96 浏览
添加回答
举报