機能
KEN_ALL.CSVから、郵便番号と住所(漢字)を抽出したファイルを作成する
出力ファイルはUTF–8、改行コードは未変換(元ファイルのまま)です。
使い方
- 日本郵便の郵便番号データダウンロードページで公開されている、"KEN_ALL.CSV"ファイルを開き、EmEditorで下記マクロを実行する。
- KEN_ALL.CSVと同じディレクトリにKEN_ALL_cnv.CSVファイルが作成される
マクロ
郵便番号データ変換.jsee
var startTime = new Date();
/*
□マクロ名:郵便番号データ変換.jsee
□バージョン:1.10
■開くファイル
郵便番号データダウンロードから取得した住所の郵便番号(CSV形式)
http://www.post.japanpost.jp/zipcode/download.html
■作成ファイル
9.町域名の内容を簡略化したファイル(ファイル名=拡張子の前に"_cnv"を追加)
■手順(例)
KEN_ALL.CSVを開く
郵便番号データ変換.jseeを実行
同一ディレクトリに変換後のファイル(UTF-8)が作成される
*/
Redraw = false;//ウィンドウの再描画:しない
document.CellMode = false;//CSV セル選択モード解除
columnN = document.GetColumns();//CSV モードで列の数を取得
if(columnN != 15){
alert( "列数エラー。列数は、" + columnN + "です。" );
Quit();
}
//■使用しない列を削除
document.selection.StartOfDocument()//カーソル位置を文頭へ移動
editor.ExecuteCommandByID(3962);//列の削除 1
editor.ExecuteCommandByID(3962);//列の削除 1
editor.ExecuteCommandByID(4490);//郵便番号(7桁)
editor.ExecuteCommandByID(3962);//列の削除 1
editor.ExecuteCommandByID(3962);//列の削除 1
editor.ExecuteCommandByID(3962);//列の削除 1
editor.ExecuteCommandByID(4490);//都道府県名
editor.ExecuteCommandByID(4490);//市区町村名
editor.ExecuteCommandByID(4490);//町域名
editor.ExecuteCommandByID(3962);//列の削除 1
editor.ExecuteCommandByID(3962);//列の削除 1
editor.ExecuteCommandByID(3962);//列の削除 1
editor.ExecuteCommandByID(3962);//列の削除 1
editor.ExecuteCommandByID(3962);//列の削除 1
editor.ExecuteCommandByID(3962);//列の削除 1
//■保存するファイル名を設定
strPath = document.Path;//文書のパスを取得
aName = document.Name.split(".");//文書のファイル名を取得
sCnvPath_Name = strPath + "\\" + aName[0] + "_cnv." + aName[1];
//■UTF8で一旦保存
document.Encoding = eeEncodingUTF8;//保存時のエンコード:UTF-8
document.UnicodeSignature = false;//保存時に(BOM)を付けない
document.Save( sCnvPath_Name );//文書を保存
document.close();//文書を閉じる
editor.ExecuteCommandByID(4583);//最も最近閉じたファイルを開く
document.CellMode = false;//CSV セル選択モード解除
//■町域の複数行に渡るかっこ書きを削除
//郵便番号の列を取得
document.selection.SetActivePoint( eePosCellLogical, 1, 1 );
editor.ExecuteCommandByID(4461);
sTmp = "\r\n" + document.selection.Text;
aPostalCode = new Array();
aPostalCode = sTmp.split("\r\n");
//町域の列を取得
document.selection.SetActivePoint( eePosCellLogical, 4, 1 );
editor.ExecuteCommandByID(4461);
sTmp = "\r\n" + document.selection.Text;
aTyou = new Array();
aTyou = sTmp.split("\r\n");
sTmp = null;
//最終行から開始行へ向かって処理を行う
fOkikae = false;//フラグ置き換えモード:終わり
re1 = new RegExp("^\"[^(]*)\"$");//")"のみを検索
re2 = new RegExp("(^\".*)([^)]*(\")$");//"("のみを検索
for(i = aTyou.length - 2; i >= 1; i--){
if( ( aPostalCode[i] == aPostalCode[i-1] ) || ( fOkikae == 1)){//郵便番号が同じor置き換えモードの場合
document.selection.SetActivePoint( eePosCellLogical, 4, i );
if( fOkikae ){
if(aTyou[i].match(re2)){//"("のみを検索
document.SetCell( i , 4, RegExp.$1 + RegExp.$2, eeDontQuote );
fOkikae = false;//フラグ置き換えモード:終わり
}else{
document.selection.SelectLine();
document.selection.Delete(1);//行削除
}
} else {
if(aTyou[i].match(re1)){//")"のみを検索
document.selection.SelectLine();
document.selection.Delete(1);//行削除
fOkikae = true;//フラグ置き換えモード:開始
}
}
}
}
//■町域の文字列を置き換え
document.selection.SetActivePoint( eePosCellLogical, 4, 1 );//カーソル位置を設定
editor.ExecuteCommandByID(4461);//列を選択
document.selection.Replace("以下に掲載がない場合","",eeFindReplaceSelOnly | eeReplaceAll,0);
document.selection.Replace("(\".*)((その他|丁目|番地|次のビルを除く|地階・階層不明|.*[、~].*|.*以上|.*以下))(\")","\\1\\3",eeFindReplaceSelOnly | eeReplaceAll | eeFindReplaceRegExp,0);
//★名駅ミッドランドスクエア(高層棟)(地階・階層不明)
document.selection.Replace("(\".*)(高層棟)(.*\")","\\1\\2",eeFindReplaceSelOnly | eeReplaceAll | eeFindReplaceRegExp,0);
//★三田市の次に番地がくる場合
document.selection.Replace("\".*の次に番地がくる場合\"","\"\"",eeFindReplaceSelOnly | eeReplaceAll | eeFindReplaceRegExp,0);
//★土樋(1丁目「11を除く」) => 土樋(1丁目)
//★切畑(長尾山「その他」) => 切畑(長尾山)
document.selection.Replace("(\".*(.*)「(.*を除く|その他)」()\")","\\1\\3",eeFindReplaceSelOnly | eeReplaceAll | eeFindReplaceRegExp,0);
//★音江町(国見その他) => 音江町(国見)
document.selection.Replace("(\".*(.*)その他()\")","\\1\\2",eeFindReplaceSelOnly | eeReplaceAll | eeFindReplaceRegExp,0);
//★花田町官有地(無番地を除く)
//★芦田町福田(376-10を除く)
//★津島町下畑地(乙を除く)
document.selection.Replace("(\".*)(.*を除く)(\")","\\1\\2",eeFindReplaceSelOnly | eeReplaceAll | eeFindReplaceRegExp,0);
//■町域のかっこ"("および")"を削除
document.selection.Replace("(\".*)((.*))(\")","\\1\\2\\3",eeFindReplaceSelOnly | eeReplaceAll | eeFindReplaceRegExp,0);
editor.ExecuteCommandByID(4099);//ファイルを上書き保存
document.close();//文書を閉じる
var endTime = new Date();
alert((endTime - startTime)/1000 + "sec");
Redraw = true;//ウィンドウの再描画:する
Quit();
補足
- UTF-8への変換(内部処理は既にUnicodeですので、正確にはUTF-8での書き出し)は処理の最後にやっても良いです(上記サンプルでは、一旦UTF-8で保存していますが、サンプルと言うことで...)
- 47行目は、元のソース上は"\"です(¥マーク2つを二重引用符でくくっている)コードの色が変になっていますが...
- EmEditorでのcsvの加工をしようと思い、その時の練習用に作成しました