반응형
package main
import (
"encoding/csv"
"fmt"
"os"
)
type Record struct {
Name string
Surname string
Number string
LastAccess string
}
var myData = []Record{}
func readCSVFile(filepath string) ([][]string, error) {
//파일 위치 정상확인
_, err := os.Stat(filepath)
if err != nil {
return nil, err
}
f, err := os.Open(filepath)
if err != nil {
return nil, err
}
//닫을껄 미리 선언한다.
defer f.Close()
lines, err := csv.NewReader(f).ReadAll()
if err != nil {
return [][]string{}, err
}
return lines, nil
}
func saveCSVFile(filepath string) error {
csvfile, err := os.Create(filepath)
if err != nil {
return err
}
defer csvfile.Close()
csvwriter := csv.NewWriter(csvfile)
csvwriter.Comma = '\t'
for _, row := range myData {
temp := []string{row.Name, row.Surname, row.Number, row.LastAccess}
_ = csvwriter.Write(temp)
}
csvwriter.Flush()
return nil
}
func main() {
if len(os.Args) != 3 {
fmt.Println("csvData input output!")
return
}
input := os.Args[1]
output := os.Args[2]
lines, err := readCSVFile(input)
if err != nil {
fmt.Println(err)
return
}
for _, line := range lines {
temp := Record{
Name: line[0],
Surname: line[1],
Number: line[2],
LastAccess: line[3],
}
myData = append(myData, temp)
fmt.Println(temp)
}
err = saveCSVFile(output)
if err != nil {
fmt.Println(err)
return
}
}
참고사항!
파일읽기 - csv
구조체에 값 할당하기 = JSON 선언방식으로도 가능함
os 파일관련 함수 사용법
os.Create
os.Open
os.Stat
그리고 중요한 정보
배열과 슬라이스의 차이
배열 => 배열 , 값복사
슬라이스 => 포인터 배열, 포인터 복사
로 일단 구분!
반응형