问题内容
我有一个以此结构开头的文件:
locals { my_list = [ "a", "b", "c", "d" //add more text before this ] }
我想在“//在此之前添加更多文本”之前添加文本“e”,在“d”之后添加“,”,所以它会像这样:
locals { MY_LIST = [ "a", "b", "c", "d", "e" //add more text before this ] }
如何动态实现此功能,以便将来可以向文件添加更多字符串?
谢谢
正确答案
要在以“//”开头的行之前添加文本“e”,您可以执行以下操作。
- 以读/写模式打开文件。
- 根据文件创建扫描器,并将每一行扫描到内存中。
- 扫描时检查每一行,看看是否遇到包含“//”的行。
- 将每一行保存在数组中,以便稍后将其写回文件。
- 如果找到该行,请附加新行“e”,并更新上一行。
- 将这些行写回文件。
func main() { f, err := os.OpenFile("locals.txt", os.O_RDWR, 0644) if err != nil { log.Fatal(err) } scanner := bufio.NewScanner(f) lines := []string{} for scanner.Scan() { ln := scanner.Text() if strings.Contains(ln, "//") { index := len(lines) - 1 updated := fmt.Sprintf("%s,", lines[index]) lines[index] = updated lines = append(lines, " "e"", ln) continue } lines = append(lines, ln) } content := strings.Join(lines, "n") _, err = f.WriteAt([]byte(content), 0) if err != nil { log.Fatal(err) } }