ISBNコードの10桁13桁相互変換ルーチンを作ってみた 〜その5〜
グループコードが2桁のものまで対応してみた
今回追加になったグループ
前回迄との処理の違い
グループコード毎に、何文字目から何文字目までがいくつだと、何桁編集という処理を列記していたが、今回より編集桁数の区切り毎にグループコード + 出版者コード + 9桁に足りない分を9で埋めたテーブルを作成して参照するように変更した
ようはデータとロジックを分割した
テスト方法
丸々入れ替えたので、一通りの(日本も含めて)テストを行った
スプリプトのダウンロード先
動作確認用テストページのURL
入力フォームにグループコード(0〜5、または7、80〜92) + 出版者記号 + 書名記号の9桁を入力する
http://natu.blue.coocan.jp/CheckISBN.htm
問題点
http://www.isbn-international.org/converter/ranges.htmのソースから定義テーブルを作成しているが、http://www.isbn-international.org/converter/ranges.jsで動的にページを作成しているものだから、いつ変更になったかが分からないです。
一定の期間ごとにスプリプトをダウンロードして前回のスプリプトと異なっていたらテーブルの再作成とかってスマートではないなぁ
定義テーブルの作成方法
以下、長いので興味のある人だけ
〜 略 〜 <TD align=middle>0</TD> <TD>English speaking area</TD> <TD noWrap align=middle>00 - 09<BR>10 - 19<BR>200 - 699<BR>7000 - 8499<BR>85000 - 89999<BR>900000 - 949999<BR>9500000 - 9999999</TD></TR> <TR> <TD align=middle>1</TD> <TD>English speaking area</TD> <TD noWrap align=middle>00 - 09<BR>100 - 399<BR>4000 - 5499<BR>55000 - 86979<BR>869800 - 998999</TD></TR> <TR> 〜 略 〜
http://www.isbn-international.org/converter/ranges.htmのソースから
〜 略 〜 0,09 0,19 0,699 0,8499 0,89999 0,949999 0,9999999 1,09 1,399 1,5499 1,86979 1,998999 〜 略 〜
こんな形に編集して拡張子を.txtにしてExcelで読み込み(csvだと前ゼロが消えるので)、文字列の連結、文字数計算を行い、クリップボードへ
A | B | C | D | E | |
---|---|---|---|---|---|
1 | 0 | 09 | 009999999 | 1 | 2 |
2 | 0 | 19 | 019999999 | 1 | 2 |
3 | 0 | 699 | 069999999 | 1 | 3 |
4 | 0 | 8499 | 084999999 | 1 | 4 |
5 | 0 | 949999 | 094999999 | 1 | 5 |
〜 略 〜
エディタに貼り付け
〜 略 〜 009999999 1 2 019999999 1 2 069999999 1 3 084999999 1 4 094999999 1 5 〜 略 〜
色々編集して
function tblMake(){ _ranges=[["019999999","1","2"], ["069999999","1","3"], ["084999999","1","4"], ["089999999","1","5"], ["094999999","1","6"], ["099999999","1","7"], 〜 略 〜 ["929999999","2","6"]]; flgTblMake = 1; _TblL = _ranges.length; }
各出版者コード桁数が変わる境目、グループコードの桁数、各出版者コード桁数の二次元テーブルにします
編集したいISBNコードのグループコード + 出版者コードで、テーブルの先頭から順に見て行って、編集したいISBNコード<=境目の関係になったところで、インデックス番目の桁数でISBNコードを分割します