Функция bufio.ScanLines
Функция bufio.ScanLines представляет собой функцию разделения (split function) для использования с bufio.Scanner. Она определяет границы строк в данных, используя символ новой строки '\n' в качестве разделителя. Эта функция возвращает true для каждого токена и false, когда достигнут конец данных. Она автоматически обрабатывает различные окончания строк, включая \n, \r\n и \r, что делает её универсальным инструментом для построчного чтения текстовых данных.
Синтаксис
bufio.ScanLines(data []byte, atEOF bool) (advance int, token []byte, err error)
Параметры
Функция принимает два параметра: срез байтов data для сканирования и булево значение atEOF, указывающее, достигнут ли конец данных. Возвращает три значения: количество байтов для перемещения вперёд advance, найденный токен token и возможную ошибку err.
Пример использования с Scanner
Давайте создадим сканер для чтения многострочного текста и установим функцию разделения ScanLines:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
text := "Line 1\nLine 2\nLine 3\n"
scanner := bufio.NewScanner(strings.NewReader(text))
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
fmt.Printf("%q\n", scanner.Text())
}
}
Результат выполнения кода:
"Line 1"
"Line 2"
"Line 3"
Пример с Windows окончаниями строк
Рассмотрим обработку текста с разделителями \r\n:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
text := "First line\r\nSecond line\r\nThird line"
scanner := bufio.NewScanner(strings.NewReader(text))
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
fmt.Printf("%q\n", scanner.Text())
}
}
Результат выполнения кода:
"First line"
"Second line"
"Third line"
Пример с чтением из файла
Покажем, как использовать ScanLines для построчного чтения файла:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Open("input.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
scanner := bufio.NewScanner(file)
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
Смотрите также
-
функцию
bufio.Scanner.Split,
которая устанавливает функцию разделения для сканера -
функцию
bufio.ScanWords,
которая разделяет данные по словам -
функцию
bufio.ScanRunes,
которая разделяет данные по рунам Unicode -
функцию
bufio.ScanBytes,
которая разделяет данные по байтам