19日に更新してた

アフィリエイトはないよ

拡張子 txt の csv ファイルデータ内のスペースを除去した csv ファイルを作る

何かよくわからないタイトルですが、拡張子 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

*1:IDはいらないし、郵便番号は全部半角でしたのでノータッチ

*2:Args を使って flag にしなかった理由でもあります