卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章33961本站已运行390

如何在go中的特定字符串之前附加到文件?

如何在go中的特定字符串之前附加到文件?

问题内容

我有一个以此结构开头的文件:

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”,您可以执行以下操作。

  1. 以读/写模式打开文件。
  2. 根据文件创建扫描器,并将每一行扫描到内存中。
  3. 扫描时检查每一行,看看是否遇到包含“//”的行。
  4. 将每一行保存在数组中,以便稍后将其写回文件。
  5. 如果找到该行,请附加新行“e”,并更新上一行。
  6. 将这些行写回文件。
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)
    }
}
卓越飞翔博客
上一篇: 仅在处理程序内有效的变量是什么意思
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏