フォーラムの返信を作成しました。

1 件の投稿を表示中 (合計 1 個)
  • 作成者
    投稿
  • 返信先: 郵便番号データ変換マクロ #28218
    musasabi
    参加者

    投稿方法を間違えたため、コードが誤変換されていましたので、再度投稿します。

    
    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");
    //alert(endTime - startTime + "ms");
    alert((endTime - startTime)/1000 + "sec");
    Redraw = true;//ウィンドウの再描画:する
    Quit();
    
1 件の投稿を表示中 (合計 1 個)