我有一个以此结构开头的文件:
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)
}
}