У меня есть текстовый файл с многострочными строками, ограниченный пустой строкой. Какой был бы лучший способ прочитать эту строку для строки в Go?Golang: Чтение текстового файла с многострочными строками
Я думаю, что мне, возможно, придется использовать сканер с моей собственной функцией Split, но просто интересно, есть ли лучший/более простой способ, который мне не хватает.
Я попытался с помощью моего собственного Splitfunc на основе bufio.ScanLines:
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 Пример представлен в исходном сообщении сейчас. Некоторые пары значений могут быть в одной записи, а не в других, и порядок также не фиксируется. – Kosie
Спасибо, за ошибку, которую вы получаете, четко сказано, что «)» отсутствует. Исправлено: если i: = bytes.IndexAny (данные, "\ n \ n"); i> = 0 { –