| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- package main
- import (
- "bufio"
- "fmt"
- "os"
- )
- func main() {
- // readFile()
- // writeFile()
- // scanFile()
- readWrite()
- }
- // Чтение файла построчно с bufio.Reader
- func readFile() {
- file, err := os.Open("data.txt")
- if err != nil {
- fmt.Printf("Ошибка открытия файла: %v\n", err)
- return
- }
- defer func() {
- if err := file.Close(); err != nil {
- fmt.Printf("Ошибка закрытия файла %v\n", err)
- } else {
- fmt.Println("Файл закрыт")
- }
- }()
- reader := bufio.NewReader(file)
- for {
- line, err := reader.ReadString('\n')
- if err != nil {
- if err.Error() != "EOF" {
- fmt.Printf("Ошибка чтения файла: %v\n")
- }
- break
- }
- processLine(line)
- }
- }
- // Функция обработки строк
- func processLine(line string) {
- fmt.Print(line) // здесь можно добавить любую обработку строки
- }
- // Буферизированная запись в файл с bufio.Writer
- func writeFile() {
- file, err := os.Create("output.txt")
- if err != nil {
- fmt.Printf("Ошибка создания файла %v\n", err)
- return
- }
- defer func() {
- if err := file.Close(); err != nil {
- fmt.Printf("Ошибка закрытия файла: %v\n", err)
- }
- }()
- writer := bufio.NewWriter(file)
- for i := 1; i < 100; i++ {
- _, err := writer.WriteString(fmt.Sprintf("Строка номер %d\n", i))
- if err != nil {
- fmt.Printf("Ошибка записи: %v\n", err)
- return
- }
- }
- if err := writer.Flush(); err != nil {
- fmt.Printf("Ошибка сброса буфера: %v\n", err)
- }
- }
- // bufio.Scanner для простого чтения
- func scanFile() {
- file, err := os.Open("data.txt")
- if err != nil {
- fmt.Printf("Ошибка открытия файла: %v\n", err)
- return
- }
- defer file.Close()
- scanner := bufio.NewScanner(file)
- lineNumber := 1
- for scanner.Scan() {
- fmt.Printf("Строка %d: %s\n", lineNumber, scanner.Text())
- lineNumber++
- }
- if err := scanner.Err(); err != nil {
- fmt.Printf("Ошибка сканирования: %v\n", err)
- }
- }
- // Комбинированное чтение и запись с bufio.ReadWriter
- func readWrite() {
- file, err := os.OpenFile("readwriter.txt", os.O_RDWR|os.O_CREATE, 0644)
- if err != nil {
- fmt.Printf("Ошибка открытия файла: %v\n", err)
- return
- }
- defer func() {
- if err := file.Close(); err != nil {
- fmt.Printf("Ошибка закрытия файла: %v\n", err)
- }
- }()
- rw := bufio.NewReadWriter(bufio.NewReader(file), bufio.NewWriter(file))
- // Чтение первой строки
- line, err := rw.ReadString('\n')
- if err != nil {
- fmt.Printf("Ошибка чтения: %v\n", err)
- return
- }
- fmt.Printf("Прочитано %s", line)
- // Переход в конец файла для записи
- _, err = rw.WriteString("Добавленная строка\n")
- if err != nil {
- fmt.Printf("Ошибка записи: %v\n", err)
- return
- }
- // Сброс буфера
- if err := rw.Flush(); err != nil {
- fmt.Printf("Ошибка сброса буфера: %v\n", err)
- }
- }
|