Reputation: 783
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...
}
End it add \n
on every line , end program to work , only work with last line...
Please put example, I try anything end any solution what i find here not work for me.
Upvotes: 57
Views: 124624
Reputation: 954
You can also use the strings.TrimSpace()
function which will also remove any extra trailing or leading characters like the ones of regex \n
, \r
and this approach is much more cleaner.
read_line = strings.TrimSpace(read_line)
Go doc: https://pkg.go.dev/strings#TrimSpace
Upvotes: 20
Reputation: 6454
If you want to read a file line-by-line, using bufio.Scanner
will be easier. Scanner won't includes endline
(\n
or \r\n
) into the line.
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...
}
If you want to remove endline
, I suggest you to use TrimRightFunc
, i.e.
read_line = strings.TrimRightFunc(read_line, func(c rune) bool {
//In windows newline is \r\n
return c == '\r' || c == '\n'
})
Update:
As pointed by @GwynethLlewelyn, using TrimRight
will be simpler (cleaner), i.e.
read_line = strings.TrimRight(read_line, "\r\n")
Internally, TrimRight
function call TrimRightFunc
, and will remove the character if it match any character given as the second argument of TrimRight
.
Upvotes: 25
Reputation: 2124
You can slice off the last character:
read_line = read_line[:len(read_line)-1]
Perhaps a better approach is to use the strings library:
read_line = strings.TrimSuffix(read_line, "\n")
Upvotes: 85