華為公司網(wǎng)站建設(shè)方案網(wǎng)站模板圖片
GO語(yǔ)言刪除文本文件中的指定行
- 1. 思路
- 2. 處理文件
- 3. 處理后的文本文件
1. 思路
假設(shè)現(xiàn)在有一個(gè)文本文件,我們需要?jiǎng)h除文件中亂碼的行。我們可以使用go的os庫(kù)來(lái)處理文件,遍歷整個(gè)文件然后將除過(guò)亂碼的行寫(xiě)入一個(gè)新文件,以此來(lái)實(shí)現(xiàn)我們的需求。
2. 處理文件
假設(shè)我們現(xiàn)在有一個(gè)配置文件hello.conf,用戶(hù)經(jīng)常修改導(dǎo)致文件錯(cuò)亂或出現(xiàn)亂碼情況,我們需要去除亂碼行以保證配置文件可用。
如下一個(gè)示例文件,注釋使用#加文本,配置信息使用等號(hào)分隔,我們需要去除掉文件中的空行、亂碼行、不包含=和#的行和包含#號(hào)卻不在開(kāi)頭的行。
#系統(tǒng)版本
version=v1.0.0#系統(tǒng)平臺(tái)
platform=arm
#數(shù)據(jù)庫(kù)信息database=127.0.0.1;3306;123456;mysql
@1234
#https端口
httpsport=8443
8443#dd
#用于開(kāi)啟https的設(shè)置
enablehttps=false#插入數(shù)據(jù)庫(kù)是否攜帶服務(wù)名稱(chēng)
is.add.name=false
#設(shè)備型號(hào)
model=RTD-1
首先以可讀寫(xiě)的方式打開(kāi)文件,并使用換行符來(lái)遍歷文件。通過(guò)特定條件篩選出可用行,并將其寫(xiě)入新文件中,最后修改新創(chuàng)建的文件,完成處理。
package import ("bufio""io""log""os""strings"
)const (FILE = "hello.conf"NEWFILE = "hellonew.conf"
)func main() {deleteBadLine()
}func deleteBadLine() {//以可讀寫(xiě)方式打開(kāi)文件file, err := os.OpenFile(FILE, os.O_RDWR, 0666)if err != nil {log.Fatal(err)}defer file.Close()//創(chuàng)建一個(gè)文件并以可讀寫(xiě)方式打開(kāi)destFile, err := os.OpenFile(NEWFILE, os.O_CREATE | os.O_RDWR, 0666)if err != nil {log.Fatal(err)}defer destFile.Close()//將文件內(nèi)容寫(xiě)入緩沖區(qū)中reader := bufio.NewReader(file)for {//以換行符來(lái)遍歷文件line, err := reader.ReadString('\n')if err != nil {log.Fatal(err)}//讀到文件結(jié)尾if err == io.EOF {break}//根據(jù)特定條件篩選行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)//將可用的行寫(xiě)入新文件if _, err = destFile.WriteString(line); err != nil {log.Fatal(err)}}}//處理完畢,將新創(chuàng)建的文件重命名//linux系統(tǒng)可以通過(guò)重命名來(lái)覆蓋靜態(tài)文件,若其他系統(tǒng),則需要先進(jìn)行刪除或備份,再重命名os.Rename(NEWFILE, FILE)
}
3. 處理后的文本文件
#系統(tǒng)版本
version=v1.0.0
#系統(tǒng)平臺(tái)
platform=arm
#數(shù)據(jù)庫(kù)信息
database=127.0.0.1;3306;123456;mysql
#https端口
httpsport=8443
#用于開(kāi)啟https的設(shè)置
enablehttps=false
#插入數(shù)據(jù)庫(kù)是否攜帶服務(wù)名稱(chēng)
is.add.name=false
#設(shè)備型號(hào)
model=RTD-1