当前位置: 首页 > news >正文

Go语言删除文本文件中的指定行

GO语言删除文本文件中的指定行

  • 1. 思路
  • 2. 处理文件
  • 3. 处理后的文本文件

1. 思路

假设现在有一个文本文件,我们需要删除文件中乱码的行。我们可以使用go的os库来处理文件,遍历整个文件然后将除过乱码的行写入一个新文件,以此来实现我们的需求。

2. 处理文件

假设我们现在有一个配置文件hello.conf,用户经常修改导致文件错乱或出现乱码情况,我们需要去除乱码行以保证配置文件可用。
如下一个示例文件,注释使用#加文本,配置信息使用等号分隔,我们需要去除掉文件中的空行、乱码行、不包含=和#的行和包含#号却不在开头的行。

#系统版本
version=v1.0.0#系统平台
platform=arm
#数据库信息database=127.0.0.1;3306;123456;mysql
@1234
#https端口
httpsport=8443
8443#dd
#用于开启https的设置
enablehttps=false#插入数据库是否携带服务名称
is.add.name=false
#设备型号
model=RTD-1

首先以可读写的方式打开文件,并使用换行符来遍历文件。通过特定条件筛选出可用行,并将其写入新文件中,最后修改新创建的文件,完成处理。

package import ("bufio""io""log""os""strings"
)const (FILE = "hello.conf"NEWFILE = "hellonew.conf"
)func main() {deleteBadLine()
}func deleteBadLine() {//以可读写方式打开文件file, err := os.OpenFile(FILE, os.O_RDWR, 0666)if err != nil {log.Fatal(err)}defer file.Close()//创建一个文件并以可读写方式打开destFile, err := os.OpenFile(NEWFILE, os.O_CREATE | os.O_RDWR, 0666)if err != nil {log.Fatal(err)}defer destFile.Close()//将文件内容写入缓冲区中reader := bufio.NewReader(file)for {//以换行符来遍历文件line, err := reader.ReadString('\n')if err != nil {log.Fatal(err)}//读到文件结尾if err == io.EOF {break}//根据特定条件筛选行if len(line) == 0 || line == "\r\n" || !strings.Contains(line, "=") && !strings.Contains(line, "#") || strings.Contains(line, "#") && !strings.HasPrefix(line, "#") {log.Println("Bad line:", line)continue} else {log.Println("Normal line:", line)//将可用的行写入新文件if _, err = destFile.WriteString(line); err != nil {log.Fatal(err)}}}//处理完毕,将新创建的文件重命名//linux系统可以通过重命名来覆盖静态文件,若其他系统,则需要先进行删除或备份,再重命名os.Rename(NEWFILE, FILE)
}

3. 处理后的文本文件

#系统版本
version=v1.0.0
#系统平台
platform=arm
#数据库信息
database=127.0.0.1;3306;123456;mysql
#https端口
httpsport=8443
#用于开启https的设置
enablehttps=false
#插入数据库是否携带服务名称
is.add.name=false
#设备型号
model=RTD-1
http://www.lryc.cn/news/114740.html

相关文章:

  • Arthas GC日志-JVM(十八)
  • ISC 2023︱诚邀您参与赛宁“安全验证评估”论坛
  • 分享一个计算器
  • Android 13 Launcher——长按图标弹窗背景变暗
  • Elasticsearch概述和DSL查询总结
  • 扩展卡尔曼滤波器代码
  • 9:00开始面试,9:08就出来了,这问题问的实在是····
  • 揭秘:5个美国程序员与日本程序员的差异
  • Springboot实现简单JWT登录鉴权
  • C++设计模式创建型之工厂模式整理
  • 前端安全XSS和CSRF讲解
  • 本地化部署自建类ChatGPT服务远程访问
  • 一、Webpack相关(包括webpack-dev-server用以热更新和html-webpack-plugin)
  • 安全防御(3)
  • AR远程专家指导在汽车改装上的应用有哪些?
  • css-3:什么是响应式设计?响应式的原理是什么?如何做?
  • Armstrong数,n位数等于其各位数的n次方之和。
  • blender的下载安装和配置中文环境
  • MyCat配置rule.xml、server.xml讲解
  • Linux项目部署
  • 案例:Docker 镜像的创建及使用(commit与dockerfile方式)
  • QGIS二次开发三:显示Shapefile
  • FFmpeg中相关结构体介绍
  • Llama 2 云端部署与API调用【AWS SageMaker】
  • 根文件系统制作
  • Linux ARM64架构 动态替换 altinstructions
  • Mac显示隐藏文件夹
  • 使用 Habana Gaudi2 加速视觉语言模型 BridgeTower
  • mysql查询语句之实践篇
  • Linux 和 MacOS 中的 profile 文件详解(二)