【发布时间】:2015-12-26 03:05:07
【问题描述】:
我有一个包含多行行的文本文件,由空行分隔。在 Go 中逐行读取该行的最佳方式是什么?
我想我可能不得不使用带有我自己的拆分功能的扫描仪,但只是想知道是否有更好/更简单的方法我错过了。
我已经尝试使用我自己的基于 bufio.ScanLines 的 Splitfunc:
func MyScanLines(data []byte, atEOF bool) (advance int, token []byte, err error) {
if atEOF && len(data) == 0 {
return 0, nil, nil
}
if i := bytes.IndexAny(data, "\n\n"); i >= 0 {
return i + 1, dropCR(data[0:i]), nil
}
if atEOF {
return len(data), dropCR(data), nil
}
return 0, nil, nil
}
但我在 IndexAny 调用中遇到错误: “语法错误:意外的分号或换行符,期待 )” - 已修复
更新:按照建议修复了上面的语法错误,但我只返回了第一行。我正在阅读文件如下:
scanner.Split(MyScanLines)
scanner.Scan()
fmt.Println(scanner.Text())
有什么建议吗?
我正在阅读的测试文件示例:
Name = "John"
Surname = "Smith"
Val1 = 700
Val2 = 800
Name = "Pete"
Surname = "Jones"
Val1 = 555
Val2 = 666
Val3 = 444
.
.
.
【问题讨论】:
-
请提供您尝试阅读的文件样本。
-
@PrashantThakkar 现在在原始帖子中提供示例。一些值对可能在一个记录中而不在其他记录中,并且顺序也不固定。
-
谢谢,您收到的错误清楚地表明“)”丢失。更正:如果 i := bytes.IndexAny(data, "\n\n");我 >= 0 {
-
@PrashantThakkar 啊不!我一直盯着那个代码,没有拿起它。啊。感谢那。我这样做的方式是推荐的方式吗?
标签: go