何かよくわからないタイトルですが、拡張子 txt の csv ファイルの住所データを使って郵便を出したい。けれど、変なところでスペースが入っていたり、姓と名前の間に半角スペースと全角スペースが混じっているのを修正するのが手間、年賀状とかの宛名ソフトを併用したいが拡張子が csv じゃないと読み込まない、しかし、ファイル名を修正するのはやっぱり手間だから、なんとかしたいなということで golang で適当に作ってみました。
package main import ( "encoding/csv" "io" "log" "os" "os/user" "path/filepath" "strings" "golang.org/x/text/encoding/japanese" "golang.org/x/text/transform" ) func main() { path := os.Args[1] user, err := user.Current() if err != nil { log.Fatalf(err.Error()) } userdir := user.HomeDir fileNameSplit := strings.Split(filepath.Base(path), ".") newFilepath := filepath.Join(userdir, "Desktop", fileNameSplit[0]+"m.csv") f, err := os.Open(path) if err != nil { log.Fatal(err) } defer f.Close() fw, err := os.Create(newFilepath) if err != nil { log.Fatal(err) } defer fw.Close() r := csv.NewReader(transform.NewReader(f, japanese.ShiftJIS.NewDecoder())) w := csv.NewWriter(transform.NewWriter(fw, japanese.ShiftJIS.NewEncoder())) for { records, err := r.Read() if err == io.EOF { break } if err != nil { log.Fatal(err) } records[1] = strings.ReplaceAll(records[1], " ", " ") //全角スペースを半角スペースに records[3] = strings.ReplaceAll(records[3], " ", "") //全角スペースを除去 records[3] = strings.ReplaceAll(records[3], " ", "") //半角スペースを除去 w.UseCRLF = true w.Write(records) w.Flush() } }
IDが1列目、氏名が2列目、郵便番号が3列目、住所が4列目だったので氏名と住所に修正をかけて、どなたのWindowsでもファイルをアプリのアイコンにドラッグ・アンド・ドロップしたら、デスクトップに csv ファイルとして出てくるようにしてみました。*1
python でも簡単に書けるのですが、golang だと exe ファイル化してドラッグ・アンド・ドロップで使えるように出来るので、マウスで使えるのがとても良い感じ。*2