1 回答

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個贊
解決方案是打開文件兩次,第一次用于讀取,第二次用于覆蓋內(nèi)容。
請參閱下面的代碼。
請注意,我使用reader.ReadString('\n')而不是ReadLine. 另請注意,我在測試錯誤之前寫入輸出。這是因?yàn)樽詈笠恍胁灰浴癨n”結(jié)尾的行與錯誤一起返回io.EOF。
func main() {
inFile, _ := os.Open("file.txt")
defer inFile.Close()
outFile, _ := os.OpenFile("file.txt", os.O_RDWR, 0777)
defer outFile.Close()
reader := bufio.NewReaderSize(inFile, 10*1024)
for {
line, err := reader.ReadString('\n')
outFile.WriteString(changeData(line))
if err != nil {
if err != io.EOF {
fmt.Println("error:", err)
}
break
}
}
}
我用這個函數(shù)測試了代碼changeData,將小寫字母更改為大寫字母,將大寫字母更改為小寫字母。然后我們可以通過重復(fù)調(diào)用函數(shù)來測試更改。
func changeData(data string) string {
o := make([]rune, 0, len(data))
for _, r := range data {
if unicode.IsLetter(r) {
if unicode.IsUpper(r) {
o = append(o, unicode.ToLower(r))
} else {
o = append(o, unicode.ToUpper(r))
}
} else {
o = append(o, r)
}
}
return string(o)
}
此代碼將覆蓋文件的每一行。該行是否被修改取決于changeData修改的內(nèi)容。
如果您想避免覆蓋每一行,因?yàn)榇蠖鄶?shù)行不需要更改,那么您必須尋找要覆蓋數(shù)據(jù)的位置。
- 1 回答
- 0 關(guān)注
- 166 瀏覽
添加回答
舉報(bào)