[Golang] Insert Line or String to File
Insert a string or line to the position of n-th (0-indexed) line of the file via Golang.
The logic of the code:
- Read the file line by line into a slice of type string [1].
- for range the string slice to insert the string to n-th line of the file. Note that line is actually a string with trailing newline '\n'. If you want to insert a line, just append '\n' to the end of the string.
The following is full source code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | package insert
import (
"bufio"
"io"
"io/ioutil"
"os"
)
func File2lines(filePath string) ([]string, error) {
f, err := os.Open(filePath)
if err != nil {
return nil, err
}
defer f.Close()
return LinesFromReader(f)
}
func LinesFromReader(r io.Reader) ([]string, error) {
var lines []string
scanner := bufio.NewScanner(r)
for scanner.Scan() {
lines = append(lines, scanner.Text())
}
if err := scanner.Err(); err != nil {
return nil, err
}
return lines, nil
}
/**
* Insert sting to n-th line of file.
* If you want to insert a line, append newline '\n' to the end of the string.
*/
func InsertStringToFile(path, str string, index int) error {
lines, err := File2lines(path)
if err != nil {
return err
}
fileContent := ""
for i, line := range lines {
if i == index {
fileContent += str
}
fileContent += line
fileContent += "\n"
}
return ioutil.WriteFile(path, []byte(fileContent), 0644)
}
|
Usage:
Assume we have a text file named test.txt as follows:
1
2
3
4
5
We want to insert a line with text hello world! to the third line (index 2) of the file. Call InsertStringToFile("test.txt", "hello world!\n", 2)
1 2 3 4 5 6 7 8 9 10 | package insert
import "testing"
func TestCountLeadingSpace(t *testing.T) {
err := InsertStringToFile("test.txt", "hello world!\n", 2)
if err != nil {
t.Error(err)
}
}
|
The result is as follows
1
2
hello world!
3
4
5
Tested on:
- Ubuntu Linux 16.10
- Go 1.7.5
References:
[1] | [Golang] Read Lines From File or String |
[2] | [Golang] Append Line/String to File |
[3] | golang insert line - Google search golang insert line - DuckDuckGo search golang insert line - Bing search golang insert line - Yahoo search |
[4] | golang insert line to file - Google search golang insert line to file - DuckDuckGo search golang insert line to file - Bing search golang insert line to file - Yahoo search |
[5] | insert sting to n-th line of file · siongui/go-rst@3bdfb1a · GitHub |