РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
713 of 1593 menu

Функция 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,
    которая разделяет данные по байтам
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить