如何删除 从线路

问题描述 投票:0回答:3
file, _ := os.Open("x.txt")
f := bufio.NewReader(file)

for {
    read_line, _ := ReadString('\n')
    fmt.Print(read_line)

    // other code what work with parsed line...
}

结束它在每一行添加

\n
,结束程序工作,只处理最后一行...

请举个例子,我尝试任何结束任何解决方案,我在这里找到的不适合我。

parsing go line
3个回答
80
投票

您可以切掉最后一个字符:

read_line = read_line[:len(read_line)-1]

也许更好的方法是使用字符串库:

read_line = strings.TrimSuffix(read_line, "\n")

25
投票

如果你想逐行读取文件,使用

bufio.Scanner
会更容易。扫描仪不会将
endline
\n
\r\n
)包含到行中。

file, err := os.Open("yourfile.txt")
if err != nil {
    //handle error
    return
}
defer file.Close()

s := bufio.NewScanner(file)
for s.Scan() {
    read_line := s.Text()

    // other code what work with parsed line...
}

如果你想删除

endline
,我建议你使用
TrimRightFunc
,即

read_line = strings.TrimRightFunc(read_line, func(c rune) bool {
    //In windows newline is \r\n
    return c == '\r' || c == '\n'
})

更新:
正如@GwynethLlewelyn 所指出的,使用

TrimRight
会更简单(更干净),即

 read_line = strings.TrimRight(read_line, "\r\n")

在内部,

TrimRight
函数调用
TrimRightFunc
,并且如果该字符与作为
TrimRight
的第二个参数给出的任何字符匹配,则将删除该字符。


18
投票

干净简单的方法

您还可以使用

strings.TrimSpace()
函数,该函数还将删除任何额外的尾随或前导字符,例如正则表达式
\n
\r
的字符,并且这种方法更加干净。

read_line = strings.TrimSpace(read_line)

Go 文档:https://pkg.go.dev/strings#TrimSpace

© www.soinside.com 2019 - 2024. All rights reserved.