go如何更新文本文件中某一行的内容

kekemuyu · 2020-03-30 23:20:11 · 5649 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2020-03-30 23:20:11 的主题,其中的信息可能已经有所发展或是发生改变。

这是代码实现,有个问题是更改某一行的内容后会影响下一个的内容.请大神帮我看一下

package main

import (
    "bufio"
    "errors"
    "fmt"
    "io"
    "os"
    "strings"
)

func main() {
    fi, err := os.OpenFile("test.txt", os.O_RDWR, os.ModePerm)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer fi.Close()
    reader := bufio.NewReader(fi)
    lineCnt := 0
    seekP := 0
    for {
        bs, _, err := reader.ReadLine()
        if err == io.EOF {
            fmt.Println(errors.New("读取完成"))
            break
        }
        lineCnt = len(bs) + 2 //ReadLine 返回读取的长度不包含换行\r\n
        if strings.Contains(string(bs), "hello") {
            delBytes := make([]byte, 0) //编辑包含hello的行,需要先在该行写入ascii的127即删除符号,再写入新内容
            for i := 0; i < lineCnt; i++ {
                delBytes = append(delBytes, 127)
            }

            fi.WriteAt(delBytes, int64(seekP))

            newStr := "hi\r\n"
            fi.WriteAt([]byte(newStr), int64(seekP)) //在该行写入新内容
            lineCnt = len([]byte(newStr))            //该行长度是新内容的长度
        }

        seekP += lineCnt
    }
}

文本文件原始:

skdflksdlkfs
sjdfksdfksf
skjdkfj hello skjdfksjdfksjdkf
123
123
123

被程序修改后,可以看到修改行的下一行被加入了很多空格

skdflksdlkfs
sjdfksdfksf
hi
123
123
123

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5649 次点击  
加入收藏 微博
5 回复  |  直到 2022-07-21 16:46:38
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传