|
@@ -0,0 +1,131 @@
|
|
|
|
|
+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)
|
|
|
|
|
+ }
|
|
|
|
|
+}
|