ric*_*ick 6 sorting file lines go
我正在尝试编写一个go函数,它将在文本文件中读取行,对它们进行排序(按字母顺序排列),并将它们覆盖回文件.现在,我能够基本上模拟cat,但我似乎无法操纵read_line中元素的内容.
func sort() {
ff, _ := os.OpenFile(file, os.O_RDWR, 0666)
f := bufio.NewReader(ff)
for {
read_line, _ := f.ReadString('\n')
fmt.Print(read_line)
if read_line == "" {
break
}
}
ff.Close()
}
Run Code Online (Sandbox Code Playgroud)
当我使用ReadString时,我如何将每一行存储到切片中(或者有更好的方法来存储它们以便我可以操作它们)?然后我会以类似于这样的方式使用sort包:
sorted := sort.Strings(lines)
Run Code Online (Sandbox Code Playgroud)
然后,写入文件,我使用类似于下面的东西,虽然我还没有列入,因为我还没有得到"排序"的工作:
io.WriteString(ff, (lines + "\n"))
Run Code Online (Sandbox Code Playgroud)
提前感谢您的任何建议!
例如,
package main
import (
"bufio"
"fmt"
"os"
"sort"
)
func readLines(file string) (lines []string, err os.Error) {
f, err := os.Open(file)
if err != nil {
return nil, err
}
defer f.Close()
r := bufio.NewReader(f)
for {
const delim = '\n'
line, err := r.ReadString(delim)
if err == nil || len(line) > 0 {
if err != nil {
line += string(delim)
}
lines = append(lines, line)
}
if err != nil {
if err == os.EOF {
break
}
return nil, err
}
}
return lines, nil
}
func writeLines(file string, lines []string) (err os.Error) {
f, err := os.Create(file)
if err != nil {
return err
}
defer f.Close()
w := bufio.NewWriter(f)
defer w.Flush()
for _, line := range lines {
_, err := w.WriteString(line)
if err != nil {
return err
}
}
return nil
}
func main() {
file := `lines.txt`
lines, err := readLines(file)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
sort.Strings(lines)
err = writeLines(file, lines)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4571 次 |
| 最近记录: |