go 언어 배치 프로그램중에 file to file 처리하기
1. 파일을 오픈하여 한 라인씩 읽어서 전체 파일을 처리한다.
2. 파일을 한 라인씩 쓴다.
3. fmt 패키지에 파일로 처리하는 모듈을 이용한다.
- Fprintln(출력될 구조체 버퍼, 실제 출력한 데이터)
- 타입을 자동으로 알아서 출력한다.
func Fprintln
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
package main
import (
"bufio"
"fmt"
"log"
"os"
)
// readLines reads a whole file into memory
// and returns a slice of its lines.
// 파일을 한 라인씩 읽기
// bufio 패키지의 scanner 구조체를 이용하여 처리한다.
//
func readLines(path string) ([]string, error) {
file, err := os.Open(path)
if err != nil {
return nil, err
}
defer file.Close()
var lines []string
scanner := bufio.NewScanner(file)
for scanner.Scan() {
lines = append(lines, scanner.Text())
}
return lines, scanner.Err()
}
// writeLines writes the lines to the given file.
// bufio를 이용하여 한 라인씩 처리한다.
// 버퍼를 만들어서 한라인씩 출력한다.
func writeLines(lines []string, path string) error {
file, err := os.Create(path)
if err != nil {
return err
}
defer file.Close()
w := bufio.NewWriter(file)
for _, line := range lines {
fmt.Fprintln(w, line)
}
return w.Flush()
}
func main() {
lines, err := readLines("foo.in.txt")
if err != nil {
log.Fatalf("readLines: %s", err)
}
for i, line := range lines {
fmt.Println(i, line)
}
if err := writeLines(lines, "foo.out.txt"); err != nil {
log.Fatalf("writeLines: %s", err)
}
}
댓글
댓글 쓰기