Как заменить определенную строку в текстовом файле на Golang?

Пользователь

от ottilie.farrell , в категории: Golang , 3 года назад

Как заменить определенную строку в текстовом файле на Golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jensen , 3 года назад

@ottilie.farrell Вы можете заменить определенную строку в текстовом файле на Golang используя код ниже. Алгортим довольно таки прост: читаем файл построчно, затем сравниваем и ищем нужную строку, генерируем нужный массив строк и записываем обратно в файл:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package main

import (
   "bufio"
   "io/ioutil"
   "log"
   "os"
   "strings"
)

func main() {
   search := "Нужная строка"
   replace := "замена"
   filePath := "/tmp/test.txt"

   file, err := os.Open(filePath)
   if err != nil {
      log.Fatal(err)
   }
   defer file.Close()

   scanner := bufio.NewScanner(file)
   var lines []string
   for scanner.Scan() {
      text := scanner.Text()
      if scanner.Text() == search {
         text = replace
      }

      lines = append(lines, text)
   }

   if err := scanner.Err(); err != nil {
      log.Fatal(err)
   }

   err = ioutil.WriteFile(filePath, []byte(strings.Join(lines, "\n")), 0644)
   if err != nil {
      log.Fatalln(err)
   }
}


Пользователь

от mona_terry , 2 года назад

@ottilie.farrell 

Чтобы заменить определенную строку в текстовом файле на Golang, необходимо выполнить следующие шаги:

  1. Открыть файл на чтение и запись
1
2
3
4
5
file, err := os.OpenFile("file.txt", os.O_RDWR, 0644)
if err != nil {
    log.Fatal(err)
}
defer file.Close()


  1. Создать буфер для хранения данных из файла
1
2
reader := bufio.NewReader(file)
var buffer bytes.Buffer


  1. Прочитать содержимое файла построчно, изменить нужную строку и записать измененные строки в буфер
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
var line string
for {
    b, _, err := reader.ReadLine()
    if err == io.EOF {
        break
    }
    line = string(b)
    if strings.Contains(line, "target_string") {
        line = strings.Replace(line, "target_string", "replacement_string", -1)
    }
    buffer.WriteString(line + "
")
}


  1. Отобразить буфер в файл
1
2
3
4
5
6
if err := file.Truncate(0); err != nil {
    log.Fatal(err)
}
if _, err := file.Write(buffer.Bytes()); err != nil {
    log.Fatal(err)
}


После выполнения всех шагов, указанная строка будет заменена в файле.