テキストデータをMySQLに登録する@全国版住所検索システム

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html lang="ja">

<head>
  <meta http-equiv="Content-type" content="text/html; charset=UTF-8">
  <meta http-equiv="Content-Script-Type" content="text/javascript">
  <meta http-equiv="Content-Style-Type" content="text/css">
  <title>日本郵便辞書データ登録用</title>

  <style type="text/css">
    #result {
      border: 2px inset;
      margin: 1em;
      padding: 1ex;
      white-space: pre;
    }
  </style>
</head>

<body>
  <ol>
    <li>
      <input type="button" value="接続確認" id="btn0">
    </li>
    <li><input type="button" value="データベースの表示" id="btn1"></li>
    <li>
      データベース名:<input type="text" value="myData" id="db_name">
      <input type="button" value="新規作成" id="btn2">
      <input type="button" value="削除する" id="btn4">
    </li>
    <li><input type="button" value="テーブルの一覧" id="btn5"></li>
    <li>
      テーブル名:<input type="text" value="japan_zip" id="tb_name">
      <input type="button" value="新規作成" id="btn6">
      <input type="button" value="構造を見る" id="btn7">
      <input type="button" value="表を部分表示(10件)" id="btn8">
      <input type="button" value="削除する" id="btn9">
    </li>
    <li>
      テキストファイル名:<input type="text" value="zipzis9b.txt" id="tf_name">
      <input type="button" value="登録する" id="btn10">
    </li>
  </ol>

  <hr>

  <textarea id="result" cols="80" rows="25">実行した結果が表示されます。</textarea><br>
  Counter : <input type="text" id="counter"><br>

<script type="text/javascript">
//@cc_on

var data = [ ];
var counter = 0;
var timerId;



var sendRequest = (function( create, setEncHeader, uriEncode ) {
  return function (callback, data, method, url, async, sload, user, password) {
    var oj = create( );
    if(! oj) return null;
    if( sload ) url += ((url.indexOf('?') == -1) ? '?': '&') + 't=' + (new Date).getTime();

    var f = 'object' === typeof callback;
    var callback_onload = f ? callback.onload: callback;
    var callback_onbeforsetheader = f ? callback.onbeforsetheader: null;

    /*@if( @_jscript )
      oj.onreadystatechange = function () { if( 4 == oj.readyState ) callback_onload( oj ), oj.abort()}
    @else@*/
      oj.onload = function () { callback_onload(oj); oj.abort() } /*@end@*/;

    data = uriEncode( data, url );
    if( 'GET' == method.toUpperCase() ) url += (url.indexOf('?')==-1 ? '?': data=='' ? '': '&') + data;
    oj.open ( method, url, async, user, password );
    if( callback_onbeforsetheader ) callback_onbeforsetheader( oj );

    setEncHeader( oj );
    oj.send( data );
    return oj;
  };
})(
    function ( ) {
      try { return new XMLHttpRequest } catch(e1) {
        try { return new ActiveXObject( 'Msxml2.XMLHTTP.6.0' ) } catch(e2) { /*
          try { return new ActiveXObject( 'Msxml2.XMLHTTP.3.0' ) } catch(e3) { */
            return null; } } // }
    },
    
   function ( o ) {
     if( !window.opera || 'function' === typeof o.setRequestHeader )
       o.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8' );
     return o;
   },
    
   function ( data, url ) {
     var d = [ ], i, enc = encodeURIComponent;

     switch( typeof data ) {
       case 'object': for( i in data ) d.push( enc(i) + '=' + enc(data[i]) ); break;
       case 'string':
         if( '' == data ) return '';
         if( data.charAt(0) == '&' ) data = data.substring( 1, data.length );
         var datas = data.split( '&' );
         for( i = 0; i < datas.length; i++ ) {
           var dataq = datas[i].split( '=' );
           d.push( enc( dataq[0] ) + '=' + enc( dataq[1] ) );
         }
       default:
     }
     return d.join( '&' );
   }
);

var Handler = (function ( $V ) {
  return function ( evt ) {
    var e  = evt./*@if( @_jscript ) srcElement @else@*/ target /*@end@*/;
    
    switch( e.id ) {
      case 'btn0': // 接続確認
        connect();
        break;

      case 'btn1': // 登録されているデータベースの一覧
        connect( 'SHOW DATABASES' );
        break;

      case 'btn2': // 新規にデータベースを作成
        connect( 'CREATE DATABASE ' + $V('db_name') + ' CHARACTER SET utf8' );
        break;

      case 'btn4': // データベースを削除
        connect( 'DROP DATABASE ' + $V('db_name') );
        break;

      case 'btn5': // 指定のデータベースのテーブルの一覧表示
        connect( 'USE ' + $V('db_name') + '; \x1f SHOW TABLES' );
        break;

      case 'btn7': // テーブルの作成時の構造を表示
        connect( 'SHOW CREATE TABLE ' + $V('db_name') + '.' + $V('tb_name') );
        break;

      case 'btn8': // テーブルの登録内容を10件だけ表示
        connect( 'SELECT * FROM ' + $V('db_name') + '.' + $V('tb_name') + ' LIMIT 10');
        break;

      case 'btn9': // テーブルを削除する
        connect( 'DROP TABLE ' + $V('db_name') + '.' + $V('tb_name') );
        break;

      case 'btn6': // 新規テーブルの作成
        connect(
          'CREATE TABLE ' + $V('db_name') + '.' + $V('tb_name') + ' (' +
            'ID INT(30) UNSIGNED NOT NULL AUTO_INCREMENT, ' +
            'ZIP_CODE VARCHAR(30) DEFAULT NULL, ' +
            'ZIP_OLD_CODE VARCHAR(21) DEFAULT NULL, ' +
            'ADDRESS1 VARCHAR(240) DEFAULT NULL, ' +
            'ADDRESS2 VARCHAR(240) DEFAULT NULL, ' +
            'CODE VARCHAR(36) DEFAULT NULL, ' +
            'FURI1 VARCHAR(240) DEFAULT NULL, ' +
            'FURI2 VARCHAR(240) DEFAULT NULL, ' +
            'FURI3 VARCHAR(240) DEFAULT NULL, ' +
            'FURI4 VARCHAR(240) DEFAULT NULL, ' +
            'TEL VARCHAR(36) DEFAULT NULL, ' +
            'SAGAWA VARCHAR(36) DEFAULT NULL, ' +
            'PERIKAN VARCHAR(36) DEFAULT NULL, ' +
            'MEITETU VARCHAR(36) DEFAULT NULL, ' +
            'ROMAN TINYTEXT DEFAULT NULL, ' +
            'PRIMARY KEY (ID) ' +
          ') ENGINE = MyISAM DEFAULT CHARSET = utf8' );
        break;

      case 'btn10': // 登録
        regist();
        break;

      default:
    }
  };
})(
    function ( id ) { return document.getElementById( id ).value; }
  );


var connect = (function ( result ) {
  return function ( cmnd ) {
    sendRequest( result, { 'cmnd': cmnd || '' }, 'POST', 'sql.php', true, true );
  };
})(
    function ( o ) {
      var text = o.responseText;

      if( /^Erroe/.test( text ) ) return alert('Error');
      if( text ) text = text.replace( /\x1e/g, '\n' ).replace( /\x1f/g, ', ' );
      document.getElementById( 'result' ).value = text;
    }
  );


var regist = (function ( geter ) {
  return function ( ) {
    document.getElementById( 'result' ).value = '問い合わせ中です';
    sendRequest( geter, '', 'POST', document.getElementById('tf_name').value, true, true );
  };
})(
    function( o ) {
      var rt = o.responseText;

      if( /^Error/.test( rt ) ) return alert( rt );
      if( !rt ) return alert( 'データがありません' );

      data = rt.split( /\r\n|\r|\n/g );
      reg2( );
      timerId = setInterval(
        function () {
          document.getElementById( 'counter' ).value = counter;
        }, 1000);
    }
  );



function reg2( ) {
  var rec = data[ counter ]
  var cnt;
  
  if( rec ) {
    rec = rec.split( '\t' );
    vlist = [ ];

    for( var cnt = 0; cnt < rec.length; cnt++ ) {
      vlist.push( rec[ cnt ] = '"' + rec[ cnt ] + '"' );
    }

    sql = 'INSERT INTO '+ $V('db_name') + '.' + $V('tb_name') + ' (' +
      'ZIP_CODE, ZIP_OLD_CODE, ADDRESS1, ADDRESS2, CODE, FURI1, FURI2, FURI3, FURI4, TEL, SAGAWA, PERIKAN, MEITETU, ROMAN ' +
      ' ) VALUES ( ' + vlist.join(',') + ' )';

    sendRequest( function ( ) { ;}, { 'cmnd': sql || '' }, 'POST', 'sql.php', true, true );
    counter++;

    return setTimeout( arguments.callee, 10 );

  } else {
    clearInterval( timerId );
  }
}

document./*@if( @_jscript ) attachEvent( 'on' + @else@*/ addEventListener( /*@end@*/
  'click', Handler, false );

</script>
</body>
</html>