テキストファイルの行を読み取り、並べ替え(アルファベット順)、上書きしてファイルに戻す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()
}
ReadStringを使用する場合、各行をスライスに保存するにはどうすればよいですか(または、操作できるように保存するためのより良い方法はありますか)?次に、次のような方法でソートパッケージを使用します。
sorted := sort.Strings(lines)
次に、ファイルに書き込むために、次のようなものを使用していますが、「ソート」がまだ機能していないため、ファイルを含めていません。
io.WriteString(ff, (lines + "\n"))
提案をよろしくお願いします!
例えば、
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)
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加