Go語(yǔ)言刪除文本文件中的指定行操作代碼
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,用戶經(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ù)名稱 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ù)名稱 is.add.name=false #設(shè)備型號(hào) model=RTD-1
到此這篇關(guān)于Go語(yǔ)言刪除文本文件中的指定行的文章就介紹到這了,更多相關(guān)Go語(yǔ)言刪除指定行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用go gin server來(lái)做文件上傳服務(wù)
今天小編就為大家分享一篇關(guān)于用go gin server來(lái)做文件上傳服務(wù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04Go語(yǔ)言Http?Server框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的httpServer
這篇文章主要為大家介紹了Go語(yǔ)言Http?Server框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的httpServer抽象,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Go語(yǔ)言對(duì)字符串進(jìn)行SHA1哈希運(yùn)算的方法
這篇文章主要介紹了Go語(yǔ)言對(duì)字符串進(jìn)行SHA1哈希運(yùn)算的方法,實(shí)例分析了Go語(yǔ)言針對(duì)字符串操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03Golang信號(hào)處理及如何實(shí)現(xiàn)進(jìn)程的優(yōu)雅退出詳解
這篇文章主要給大家介紹了關(guān)于Golang信號(hào)處理及如何實(shí)現(xiàn)進(jìn)程的優(yōu)雅退出的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03golang中結(jié)構(gòu)體嵌套接口的實(shí)現(xiàn)
本文主要介紹了golang中結(jié)構(gòu)體嵌套接口的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04使用golang腳本基于kubeadm創(chuàng)建新的token(問(wèn)題分析)
這篇文章主要介紹了使用golang腳本基于kubeadm創(chuàng)建新的token(問(wèn)題分析),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-10-10Golang創(chuàng)建第一個(gè)web項(xiàng)目(Gin+Gorm)
本文主要介紹了Golang創(chuàng)建第一個(gè)web項(xiàng)目(Gin+Gorm),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06