本館粉絲專頁

使用者:Digipunk/團隊及個人投打統計:轉換工具

分享此網頁到Facebook
分享此網頁到Plurk
分享此網頁到百度搜藏
分享此網頁到Twitter
分享此網頁到Del.icio.us
最近作者:Digipunk 2019年9月9日 (星期一)10:29
台灣棒球維基館
跳轉到: 導覽搜尋

目次

[編輯] 投打數據轉換

  • 直接用滑鼠複製官網投打數據並貼於本頁面裡的編輯區塊,即可轉換成 wiki 語法。
  • 貼進編輯區塊的第一列必須是欄位名稱,第二列開始每一欄便是它們的對應值(按照官網順序即可,不必如範例般對齊,也不必照輸出欄位的順序填)。
  • 一列是一筆記錄,欄位間以空格隔開。
  • 各官網使用的欄位名稱可能不同,例如投手犯規可能叫做 BKBLKBULK,遇上述情況需更改其名稱以符合此處欲產生的欄位(BK)。
  • 僅轉換所需欄位,用不到的欄位皆自動忽略。
  • 由於根據空格判斷欄位順序,遇人名包含空格時需手動拿掉空格或以暫時填入其它字元(例如 _)再進行轉換。
  • 複製、貼上時需留意欄位與值是否正確對應,尤其從 PDF 文件複製字串有時候會漏掉一些字。
  • 建議複製後就直接先點擊一次「維基語法」按鈕,大致觀察其結果是否看似正常,不正常再回頭檢查哪些欄位或值有問題。
  • 官網資料裡的局數若以 1/32/3 形式表達,需手動改成 .1.2 再進行轉換。
  • 總之,欠缺的欄位自行手動補上,例如「打擊數據」裡沒 GW,就眼睛瞄一下官網資料,手動在每隊後面加上。又例如「投球數據」沒有 FLD,一樣手動加上去就好了。

[編輯] 自動處理

  • 明顯只是欄位名稱不同的情況,此程式會自動修正(在點擊「維基語法」按鈕時)。
  • 包括我們想要是的 SB/CS,若官網欄位為 SB-ATT 也會自動相減求出 CS

[編輯] 重新計算總和

  • 程式會自動計算一次總和:
  • 一方面可因應某些賽事沒有總和值的情況,例如 BFA、棒協的資料可能缺少此項數據。
  • 二方面可驗證官網呈現的總和值是否正確,例如 WBSC 的 IP(投球局數)總和從來都沒有正確過。
  • 提醒事項:
  • 為使程式單純化,所有除法皆取至小數點後三位,但 WBSC ERA(防禦率)通常只顯示兩位,BFA 及棒協顯示三位,為使 WBSC 格式一致需手動再往前四捨五入一位。
    這情況一定會遇到,如果重新計算總和的結果與官網結果相同就不需處理,但 WBSC 的 IP 總和向來錯誤,所以它計算的 ERA 也必然不正確。
  • ERA 計算公式涉及該賽事正規局數,需指定。
  • 若有 PO(刺殺)、A(助殺)、E(失誤) 才能正確計算 FLD(守備率),否則這裡以取巧方式處理,無法 100% 精確(若官網有值應以官網值為準)。

[編輯] 參考範例

  • 只是示範對於最近幾屆賽事的處理,從官網複製過來的資料不會十全十美,多少還是有些需要修正之處。

[編輯] 團隊打擊數據

參考範例:▼2017-WBSC-U18 ▼2018-WBSC-U15 ▼2018-BFA-U12 ▼2019-WBSC-U18
▼維基語法

[編輯] 團隊投球數據

參考範例:▼2017-WBSC-U18 ▼2018-WBSC-U15 ▼2018-BFA-U12 ▼2019-WBSC-U18
▼維基語法

[編輯] CSS & JS

DIV.dgpk-textarea {background:#FFD;font:normal 8pt/1.2 Consolas,monospace,'Courier New';padding:4px 8px;border:1px solid black;white-space:pre-wrap} SPAN[class*="dgpk-btn"] {display:inline-block;padding:1px 4px;border-radius:3px;border:1px solid black;background:#EEE;cursor:pointer;white-space:nowrap;margin:1px 0;font-family:Consolas,monospace} SPAN[class*="dgpk-btn"]:hover {background:#888;color:white} SPAN[class*="dgpk-dn"] {background:#000 !important;color:white !important} .checkboxes INPUT {margin:2px 0} .innings SELECT {font:8pt/1 Consolas,monospace}
var xkeys = { 'b': ['TEAM', 'G/W', 'AB', 'R', 'RBI', 'H', 'HR', 'TB', 'SO', 'BB', 'SB/CS', 'OBP', 'SLG', 'AVG'], 'p': ['TEAM', 'IP', 'AB', 'R', 'ER', 'H', 'HR', 'SO', 'BB', 'HBP', 'WP', 'BK', 'ERA', 'FLD'] }; var xidx = { 'b': {}, 'p': {} }; var xidx_special = { 'b': {'ATT':-1, 'HBP':-1, 'SF':-1, '2B':-1, '3B':-1, 'L':-1}, 'p': {'A':-1, 'E':-1, 'PO':-1} }; var xbest = { 'b': { 'desc' : ['G/W', 'AB', 'R', 'RBI', 'H', 'HR', 'TB', 'BB', 'SB/CS', 'OBP', 'SLG', 'AVG'], 'asc' : ['SO'] }, 'p': { 'desc' : ['SO', 'FLD'], 'asc' : ['R', 'ER', 'H', 'HR', 'BB', 'HBP', 'WP', 'BK', 'ERA'] } }; for (var i = 0; i < 2; i++) { var x = i == 0 ? 'b' : 'p'; for (var z = 0, zz = xkeys[x].length; z < zz; z++) { var key = xkeys[x][z]; xidx[x][key] = -1; } document.getElementById(x + 'data').setAttribute('contenteditable', true); document.getElementById(x + 'dscr').innerHTML = 'TEAM: | ' + xkeys[x].slice(1).join(' || '); document.getElementById('c-' + x + 'best').innerHTML = '<TABLE CELLSPACING="0" CELLPADDING="0"><TR><TD><INPUT TYPE="checkbox" ID="' + x + 'best"></TD><TD><LABEL FOR="' + x + 'best">標示最佳值</TD></TR></TABLE></LABEL>'; // event handlers document.getElementById(x + 'conv').onclick = dgpk_conv; document.getElementById(x + 'data').onpaste = dgpk_pastedata; } var BTN = document.getElementsByClassName('__DGPK_EXAM__'); for (var i = 0; i < BTN.length; i++) { BTN[i].onclick = dgpk_exam; } var sel = '<TABLE CELLSPACING="0" CELLPADDING="0"><TR><TD>正規局數:</TD><TD><SELECT ID="pinnings">'; for (var i = 5; i <= 9; i++) { sel += '<OPTION VALUE="' + i + '"' + (i == 9 ? ' selected' : '') + '>' + i + '</OPTION>'; } sel += '</SELECT></TD></TR></TABLE>'; document.getElementById('s-pinnings').innerHTML = sel; //-------------------------- // functions //-------------------------- function dgpk_pastedata(ev) { var txt = (ev.originalEvent || ev).clipboardData.getData('text/html').trim(); txt = txt.replace(/<(\/?(html|body)|!--(Start|End)Fragment--)>/ig, ''); if (txt.indexOf('<') < 0 || txt.indexOf('>') < 0) { // plain text return true; } ev.preventDefault(); txt = txt.replace(/<\/tr>/ig, '~~~~').replace(/<\/t(h|d)>/ig, ' ').replace(/<\/?[^>]+>/g, '').replace(/\r?\n/g, '').replace(/(\s*~~~~\s*)+/g, '\n'); window.document.execCommand('insertText', false, txt); } function dgpk_conv(event) { var o = event.srcElement || event.target; var x = o.id.substr(0, 1); var num_cols = xkeys[x].length; var chk_best = document.getElementById(x + 'best').checked; //------------------ // normalize //------------------ document.getElementById(x + 'data').innerText = document.getElementById(x + 'data').innerText.replace(/\r/g, '').replace(/\s*\n+\s*/g, '\n').replace(/TPE/g, 'ROC').trim().toUpperCase().replace(/(\s+)(BULK|BLK)(\s+)/g, '$1BK$3').replace(/(\s+)HP(\s+)/g, '$1HBP$2').replace(/(\s+)HB(\s+)/g, '$1HBP$2').replace(/(\s+)BI(\s+)/g, '$1RBI$2').replace(/(\s+)SLG%(\s+)/g, '$1SLG$2').replace(/(\s+)B\/AVG%(\s+)/g, '$1AVG$2').replace(/(\s+)(FLD%|FPCT)(\s+)/g, '$1FLD$3').replace(/(\s+)OB%(\s+)/g, '$1OBP$2').replace(/(\s+)IO\/TB(\s+)/g, '$1IO.TB$2').replace(/(\s+)B\/AVG(\s+)/g, '$1B.AVG$2').replace(/(\S+)-(\S+)/g, '$1 $2'); //.replace(/(\s*)\/(\s*)/g, '/') 這個再考慮看看,不處理好像也好 // explode lines var LINES = document.getElementById(x + 'data').innerText.split(/\n+/); if (LINES.length < 2) return false; //------------------ // build index //------------------ var colnames = LINES[0].split(/\s+/); for (var col in xidx[x]) { var COL = col.split('/'); var IDX = []; for (var z = 0, zz = COL.length; z < zz; z++) { IDX[z] = -1; for (var j = 0, jj = colnames.length; j < jj; j++) { if (COL[z] == colnames[j]) { IDX[z] = j; break; } } } xidx[x][col] = IDX.join('/'); } // special columns for (var col in xidx_special[x]) { for (var j = 0, jj = colnames.length; j < jj; j++) { if (col == colnames[j]) { xidx_special[x][col] = j; break; } } } // collect values var total_line = -1; var RESULT = []; var SUM_SPECIAL = {}; for (var i = 1, ii = LINES.length; i < ii; i++) { var colval = LINES[i].split(/\s+/); var result = []; if (colval[0] == 'TOTALS' || colval[1] == 'TOTALS') { total_line = i; } for (var col in xidx[x]) { var IDX = xidx[x][col].split('/'); var VAL = []; for (var z = 0, zz = IDX.length; z < zz; z++) { var idx = IDX[z]; if (idx < 0) { if (col == 'SB/CS' && z == 1 && xidx_special[x].ATT >= 0 && colval[IDX[0]] && colval[xidx_special[x].ATT]) { VAL.push(parseInt(colval[xidx_special[x].ATT]) - parseInt(colval[IDX[0]])); } else if (col == 'G/W' && z == 0 && xidx_special[x].L >= 0 && colval[IDX[1]] && colval[xidx_special[x].L]) { VAL.push(parseInt(colval[xidx_special[x].L]) + parseInt(colval[IDX[1]])); } else { VAL.push('-'); } } else { if (col == 'ERA' || col == 'IP') { if (colval[idx] && !isNaN(colval[idx])) { if (col == 'IP') { if (colval[idx].indexOf('.') < 0) { colval[idx] += '.0'; } } VAL.push(colval[idx]); } else { VAL.push('-'); } } else { VAL.push((colval[idx] || '-').replace(/^0\./, '.')); } } } result.push(VAL.join('/')); } RESULT.push(result); // special values if (total_line == i) continue; for (var col in xidx_special[x]) { if (SUM_SPECIAL[col] == null) SUM_SPECIAL[col] = 0; var idx = xidx_special[x][col]; var val = colval[idx]; if (!isNaN(val)) { SUM_SPECIAL[col] += parseInt(val); } } } //------------------------------- // recalc_total //------------------------------- var retotal = []; var ip_a = 0; var ip_b = 0; var num_fld = 0; for (var i = 1; i < num_cols; i++) { retotal[i] = 'na'; var col = xkeys[x][i]; if (['AVG', 'OBP', 'SLG', 'ERA'].indexOf(col) >= 0) { continue; } var VAL = ['na', 'na']; for (var j = 0, jj = RESULT.length; j < jj; j++) { if (j == total_line - 1) continue; if (col == 'IP') { var val = RESULT[j][i].split('.'); if (!isNaN(val[0])) { ip_a += parseInt(val[0]); if (val.length > 1 && val[1] != '' && !isNaN(val[1])) { ip_b += parseInt(val[1]); } } } else { var val = RESULT[j][i].split('/'); if (!isNaN(val[0])) { if (VAL[0] == 'na') VAL[0] = 0; if (col == 'FLD') num_fld++; VAL[0] += parseFloat(val[0]); } if (val.length == 2) { if (!isNaN(val[1])) { if (VAL[1] == 'na') VAL[1] = 0; VAL[1] += parseFloat(val[1]); } } } } if (col == 'IP') { ip_a += Math.floor(ip_b / 3); ip_b %= 3; retotal[i] = ip_a + '.' + ip_b; } else { if (col.indexOf('/') < 0) { retotal[i] = VAL[0]; } else { retotal[i] = VAL[0] + '/' + VAL[1]; } } } var tmpval1, tmpval2; if (x == 'b') { if (isNaN(retotal[xkeys[x].indexOf('TB')]) && !isNaN(retotal[xkeys[x].indexOf('H')]) && !isNaN(retotal[xkeys[x].indexOf('HR')]) && xidx_special[x]['2B'] >= 0 && xidx_special[x]['3B'] >= 0) { retotal[xkeys[x].indexOf('TB')] = retotal[xkeys[x].indexOf('H')] + 2 * SUM_SPECIAL['2B'] + 3 * SUM_SPECIAL['3B'] + 4 * retotal[xkeys[x].indexOf('HR')]; } if (!isNaN(retotal[xkeys[x].indexOf('TB')]) && !isNaN(retotal[xkeys[x].indexOf('AB')])) { tmpval1 = retotal[xkeys[x].indexOf('TB')]; tmpval2 = retotal[xkeys[x].indexOf('AB')]; if (tmpval2 > 0) { retotal[xkeys[x].indexOf('SLG')] = __dgpk_round3(tmpval1 / tmpval2); } } if (!isNaN(retotal[xkeys[x].indexOf('H')]) && !isNaN(retotal[xkeys[x].indexOf('AB')])) { tmpval1 = retotal[xkeys[x].indexOf('H')]; tmpval2 = retotal[xkeys[x].indexOf('AB')]; if (tmpval2 > 0) { retotal[xkeys[x].indexOf('AVG')] = __dgpk_round3(tmpval1 / tmpval2); } } if (!isNaN(retotal[xkeys[x].indexOf('H')]) && !isNaN(retotal[xkeys[x].indexOf('BB')]) && !isNaN(retotal[xkeys[x].indexOf('AB')]) && !isNaN(SUM_SPECIAL['HBP']) && !isNaN(SUM_SPECIAL['SF'])) { tmpval1 = retotal[xkeys[x].indexOf('H')] + retotal[xkeys[x].indexOf('BB')] + SUM_SPECIAL['HBP']; tmpval2 = retotal[xkeys[x].indexOf('AB')] + retotal[xkeys[x].indexOf('BB')] + SUM_SPECIAL['HBP'] + SUM_SPECIAL['SF']; if (tmpval2 > 0) { retotal[xkeys[x].indexOf('OBP')] = __dgpk_round3(tmpval1 / tmpval2); } } } else { if (!isNaN(retotal[xkeys[x].indexOf('ER')]) && !isNaN(retotal[xkeys[x].indexOf('IP')])) { tmpval1 = retotal[xkeys[x].indexOf('ER')] * parseInt(document.getElementById('pinnings').value); tmpval2 = ip_a + ip_b * 2/3; if (tmpval2 > 0) { retotal[xkeys[x].indexOf('ERA')] = __dgpk_round3(tmpval1 / tmpval2); } } if (xidx_special[x].A >= 0 && xidx_special[x].E >= 0 && xidx_special[x].PO >= 0) { // 正確算法 tmpval1 = SUM_SPECIAL['A'] + SUM_SPECIAL['PO']; tmpval2 = tmpval1 + SUM_SPECIAL['E']; if (tmpval2 > 0) { retotal[xkeys[x].indexOf('FLD')] = __dgpk_round3(tmpval1 / tmpval2); } } else if (!isNaN(retotal[xkeys[x].indexOf('FLD')])) { // 偷雞摸狗法約略值 tmpval1 = retotal[xkeys[x].indexOf('FLD')]; tmpval2 = num_fld; if (tmpval2 > 0) { retotal[xkeys[x].indexOf('FLD')] = __dgpk_round3(tmpval1 / tmpval2); } } } //------------------------------- // post process //------------------------------- var idx, key, val; var BEST_VAL = {}; var BEST_CNT = {}; if (chk_best) { // phase 1 - find the best values for (var z = 0; z < num_cols; z++) { key = xkeys[x][z]; if (xbest[x].desc.indexOf(key) >= 0) { for (var i = 0, ii = RESULT.length; i < ii; i++) { if (i == total_line - 1) { continue; } val = RESULT[i][z].split('/')[0]; if (!isNaN(val)) { if (BEST_VAL[key] == null || parseFloat(val) > parseFloat(BEST_VAL[key])) { BEST_VAL[key] = val; BEST_CNT[key] = 1; } else if (parseFloat(val) == parseFloat(BEST_VAL[key])) { BEST_VAL[key] = val; BEST_CNT[key]++; } } } } else if (xbest[x].asc.indexOf(key) >= 0) { for (var i = 0, ii = RESULT.length; i < ii; i++) { if (RESULT[i][0] == 'Totals' || RESULT[i][1] == 'Totals') continue; val = RESULT[i][z].split('/')[0]; if (!isNaN(val)) { if (BEST_VAL[key] == null || parseFloat(val) < parseFloat(BEST_VAL[key])) { BEST_VAL[key] = val; BEST_CNT[key] = 1; } else if (parseFloat(val) == parseFloat(BEST_VAL[key])) { BEST_VAL[key] = val; BEST_CNT[key]++; } } } } } // phase 2 - class for best values and deal with the hidden values for SB/CS var cls = null; for (var z = 0; z < num_cols; z++) { key = xkeys[x][z]; for (var i = 0, ii = RESULT.length; i < ii; i++) { if (RESULT[i][0] == 'Totals' || RESULT[i][1] == 'Totals') continue; cls = ''; val = RESULT[i][z].split('/')[0]; if (!isNaN(val)) { if (parseFloat(val) == parseFloat(BEST_VAL[key])) { if (BEST_CNT[key] > 1) { cls = 'CLASS="best2"| '; } else { cls = 'CLASS="best"| '; } } /* 移到 DGPK_STATS(),這裡不處理 if (key == 'SB/CS') { val = '&lt;S>' + (parseInt(val) < 10 ? '0' : '') + val + '&lt;/S>'; RESULT[i][z] = val + RESULT[i][z]; } */ RESULT[i][z] = cls + RESULT[i][z]; } } } } else { // !checked /* // SB 移到 DGPK_STATS(),此區段已無需要,除非日後有其它欄位需處理 for (var z = 0; z < num_cols; z++) { key = xkeys[x][z]; if (key == 'SB/CS') { for (var i = 0, ii = RESULT.length; i < ii; i++) { if (i == total_line - 1) continue; val = RESULT[i][z].split('/')[0]; if (!isNaN(val)) { val = '&lt;S>' + (parseInt(val) < 10 ? '0' : '') + val + '&lt;/S>'; RESULT[i][z] = val + RESULT[i][z]; } } } } */ } //------------------------------- // output //------------------------------- result = ''; for (var i = 0, ii = RESULT.length; i < ii; i++) { if (xidx[x].TEAM >= 0) { if (i == total_line - 1) { result += '<SPAN STYLE="color:blue"><B>Totals</B></SPAN>'; } else { result += RESULT[i][0] == '-' ? '' : '<SPAN STYLE="color:blue"><B>' + RESULT[i][0] + '</B></SPAN>'; } result += '\n'; } result += (i == total_line - 1 ? '!' : '|') + ' '; result += RESULT[i].slice(1).join(' || '); result += '\n'; } result = result.replace(/\| CLASS="/g, '|CLASS="'); //------------------------------- // output recalc'd total //------------------------------- result += '<DIV STYLE="border-top:2px dashed #0A0;width:80%;height:0;margin-top:10px;padding-top:10px;font-weight:bold">'; result += '! '; result += retotal.slice(1).join(' || ').replace(/([\.0-9]+)/g, '<SPAN STYLE="color:#0A0">$1</SPAN>').replace(/na/g, '<SPAN STYLE="color:red">na</SPAN>'); result += '</DIV>'; result += '\n'; //document.getElementById(x + 'wiki').innerText = result; document.getElementById(x + 'wiki').innerHTML = result; return false; } function __dgpk_round3(n, d, zero) { if (d == null) d = 3; var fac = Math.pow(10, d); var val = '' + Math.round(n * fac) / fac; var mat = val.split('.'); val = mat[0] + '.' + ((mat[1] || '') + ('' + fac).substr(1)).substr(0, 3); if (!zero) { val = val.replace(/^0\./, '.'); } return val; } function dgpk_exam(event) { var o = event.srcElement || event.target; var x = o.className.substr(0, 1); var exam; if (x == 'b') { switch (o.innerText.substr(1)) { case '2017-WBSC-U18': exam = 'Player Team AB R H 2B 3B HR RBI TB AVG SLG OBP OPS BB HBP SO GDP SF SH SB CS\n' + '- USA 303 61 83 15 5 6 50 126 .274 .416 .377 .793 47 4 81 1 1 1 27 3\n' + '- KOR 290 68 73 15 3 6 64 112 .252 .386 .372 .758 53 4 64 3 2 9 12 7\n' + '- JPN 299 52 75 13 0 3 41 97 .251 .324 .350 .674 43 6 69 5 6 9 16 6\n' + '- CAN 295 56 68 15 3 9 51 116 .231 .393 .367 .760 58 8 110 8 4 1 14 3\n' + '- AUS 260 39 64 10 4 2 31 88 .246 .338 .350 .688 37 6 63 3 3 3 12 3\n' + '- CUB 261 35 68 8 3 0 28 82 .261 .314 .340 .654 28 5 54 4 3 4 5 3\n' + '- TPE 254 44 70 7 4 1 37 88 .276 .346 .409 .755 50 10 41 8 4 7 8 9\n' + '- NED 248 39 54 13 1 2 29 75 .218 .302 .340 .642 41 5 75 4 0 3 4 0\n' + '- ITA 246 26 50 7 2 3 23 70 .203 .285 .303 .588 29 7 72 2 2 2 9 6\n' + '- NCA 272 44 77 7 4 3 39 101 .283 .371 .367 .738 26 12 56 10 3 1 8 2\n' + '- MEX 237 25 53 15 1 2 22 76 .224 .321 .311 .632 25 6 55 5 2 7 9 4\n' + '- RSA 195 9 32 4 0 0 6 36 .164 .185 .249 .434 20 2 82 2 0 7 4 5\n' + 'Totals - 3160 498 767 129 30 37 421 1067 .243 .338 .349 .687 457 75 822 55 30 54 128 51\n'; break; case '2018-BFA-U12': exam = 'TEAM G W PA AB RBI R AVG H 2B 3B HR TB SLG GDP SH SF BB HBP IO/TB OBP SO SB CS T.A PO A E FLD\n' + 'ROC 6 6 186 160 52 71 0.444 71 26 10 6 135 0.844 0 8 2 10 6 0 0.468 18 16 1 2.798 91 24 2 0.983\n' + 'KOR 6 4 159 134 26 38 0.284 38 15 4 0 61 0.455 0 0 2 13 10 0 0.384 37 12 3 3.865 96 21 6 0.951\n' + 'JPN 6 4 176 137 50 66 0.372 51 15 4 2 80 0.584 0 1 2 34 2 0 0.494 18 44 1 2.826 83 21 3 0.972\n' + 'PAK 6 2 130 117 13 24 0.222 26 7 1 0 35 0.299 0 0 1 10 2 0 0.292 45 28 2 2.780 83 16 19 0.839\n' + 'HKG 5 3 119 95 15 22 0.221 21 1 1 0 24 0.253 0 1 1 19 1 2 0.350 43 23 2 2.865 83 26 13 0.893\n' + 'INA 5 2 127 103 34 43 0.350 36 11 1 0 49 0.476 0 1 0 18 5 0 0.465 23 33 1 2.478 57 11 7 0.907\n' + 'IND 5 1 106 92 9 21 0.217 20 1 1 0 23 0.250 0 0 0 10 4 0 0.321 36 28 1 1.833 66 16 15 0.845\n' + 'LKA 5 0 12 90 13 17 0.256 23 4 0 0 27 0.300 0 0 0 19 3 0 0.402 42 31 6 7.060 60 21 21 0.794\n'; break; case '2018-WBSC-U15': exam = 'TEAM AVG AB R H 2B 3B HR RBI TB SLG BB HBP SO GDP OBP SF SH SB-ATT G W\n' + 'USA .314 220 88 69 17 5 3 71 105 .477 48 24 38 4 .470 8 4 17-20 9 8\n' + 'PAN .265 223 52 59 16 4 1 45 86 .386 39 9 47 3 .392 2 8 15-18 9 7\n' + 'ROC .303 234 47 71 19 2 1 41 97 .415 33 9 29 1 .404 4 8 9-11 9 6\n' + 'JPN .311 235 68 73 10 4 2 60 97 .413 37 8 35 2 .417 3 7 18-20 9 5\n' + 'CUB .295 193 49 57 7 4 1 39 75 .389 49 13 34 2 .463 2 7 14-21 8 5\n' + 'DOM .310 226 56 70 24 1 6 44 114 .504 35 4 50 3 .405 4 1 9-12 8 4\n' + 'BRA .277 202 46 56 13 2 0 40 73 .361 40 10 46 0 .419 1 4 6-8 8 5\n' + 'NED .279 208 55 58 12 3 1 42 79 .380 38 5 52 1 .396 4 7 16-17 8 4\n' + 'AUS .280 200 55 56 7 6 5 44 90 .450 53 12 46 2 .451 3 1 9-13 8 3\n' + 'CHN .215 186 14 40 8 1 0 11 50 .269 17 6 49 3 .300 1 1 8-12 8 1\n' + 'GER .176 176 17 31 4 3 0 11 41 .233 35 11 37 3 .347 0 6 9-11 8 1\n' + 'RSA .158 165 16 26 5 1 0 12 33 .200 34 4 66 1 .314 1 2 2-7 8 1\n' + 'Totals .270 2468 561 666 142 36 20 460 940 .381 454 0 529 25 .379 33 56 132-170 100 50\n'; break; case '2019-WBSC-U18': exam = 'TEAM AVG AB R H 2B 3B HR RBI TB SLG% BB HP SO GDP OB% SF SH SB-ATT W L\n' + 'ROC .296 274 56 81 19 9 0 45 118 .431 36 12 43 3 .399 1 3 13-18 7 2\n' + 'USA .298 302 60 90 17 5 3 51 126 .417 38 8 67 4 .384 6 0 9-14 7 2\n' + 'KOR .281 299 47 84 6 1 3 38 101 .338 30 11 68 2 .363 4 6 14-20 6 3\n' + 'AUS .254 287 36 73 10 2 1 29 90 .314 25 6 74 4 .326 1 2 5-14 4 5\n' + 'JPN .259 220 55 57 8 3 5 50 86 .391 41 8 35 5 .390 3 10 4-6 5 3\n' + 'CAN .297 266 61 79 16 1 5 55 112 .421 33 5 66 3 .379 5 0 11-11 4 4\n' + 'NED .253 245 37 62 14 3 4 36 94 .384 35 2 67 1 .346 4 2 7-11 6 2\n' + 'ESP .257 261 45 67 13 3 2 38 92 .352 29 10 62 6 .351 2 5 8-10 3 5\n' + 'PAN .219 228 31 50 5 1 0 26 57 .250 29 2 47 4 .308 4 1 4-6 3 5\n' + 'NCA .243 230 25 56 8 4 0 22 72 .313 18 6 58 2 .314 1 2 4-12 3 5\n' + 'CHN .203 231 31 47 11 1 1 25 63 .273 38 3 76 2 .320 3 4 13-20 2 6\n' + 'RSA .135 178 11 24 5 0 0 7 29 .163 13 8 62 0 .226 0 2 7-13 0 8\n'; break; } } else { switch (o.innerText.substr(1)) { case '2017-WBSC-U18': exam = 'Player Team W L ERA APP GS SV CG SHO IP H R ER BB SO 2B 3B HR AB B/AVG WP HBP BK SFA SHA GO FO\n' + '- USA 9 0 0.35 26 9 1 1 1 77.0 34 5 3 29 101 8 0 0 251 .135 3 2 0 1 3 82 35\n' + '- KOR 7 2 3.30 29 9 3 0 0 79.0 70 36 29 28 100 13 1 4 306 .229 2 6 0 3 1 72 56\n' + '- JPN 6 3 1.69 26 9 1 0 0 80.0 47 24 15 48 119 9 1 1 276 .170 11 4 2 1 7 65 45\n' + '- CAN 5 4 4.33 26 9 3 0 0 79.0 72 50 38 53 63 7 1 6 300 .240 9 5 0 3 11 88 74\n' + '- AUS 4 4 2.67 25 8 1 2 1 67.1 74 32 20 23 56 13 0 5 268 .276 6 2 1 2 6 87 50\n' + '- CUB 3 5 4.66 21 8 1 0 0 65.2 72 42 34 28 70 10 3 0 262 .275 4 4 2 2 2 67 48\n' + '- TPE 6 2 2.96 24 8 2 0 0 73.0 51 26 24 35 84 10 2 7 261 .195 4 4 0 2 2 63 62\n' + '- NED 4 4 2.87 21 8 1 1 1 62.2 61 28 20 21 55 11 3 2 242 .252 4 3 0 0 5 54 65\n' + '- ITA 2 6 5.75 22 7 1 1 0 61.0 72 50 39 38 40 14 6 0 249 .289 10 6 0 4 8 74 60\n' + '- NCA 2 6 7.48 22 8 0 0 0 65.0 61 65 54 53 52 11 6 5 250 .244 9 7 5 3 5 79 55\n' + '- MEX 2 6 5.43 24 8 0 0 0 64.2 66 49 39 50 50 5 2 1 246 .268 15 15 0 4 5 72 57\n' + '- RSA 0 8 10.59 19 8 0 2 0 52.2 86 88 62 43 32 18 5 5 245 .351 17 6 6 5 0 52 66\n' + 'Totals - 50 50 4.20 285 99 14 7 3 808.1 766 495 377 449 822 129 30 36 3156 .243 94 64 16 30 55 855 673\n'; break; case '2018-BFA-U12': exam = 'TEAM GS IP PA AB H HR BB HBP SO ERA WHIP WP BK R ER W L S H NB G FLD\n' + 'ROC 6 31 117 100 10 0 14 2 40 0.968 0.774 6 0 7 5 6 0 1 0 411 19 0.983\n' + 'KOR 6 32 132 109 15 0 17 3 48 1.125 1.000 13 1 10 6 4 2 1 0 535 19 0.951\n' + 'JPN 6 28 123 97 19 1 17 6 41 2.786 1.286 5 0 15 13 4 2 0 0 477 15 0.972\n' + 'PAK 6 27.2 160 125 33 0 25 8 46 6.506 2.096 10 2 42 30 2 4 0 0 602 16 0.839\n' + 'HKG 5 27.2 141 120 37 0 13 6 32 4.337 1.807 9 2 29 20 3 2 1 0 509 16 0.893\n' + 'INA 5 20 131 105 47 3 23 1 20 15.900 3.500 14 1 57 53 2 3 0 0 508 18 0.907\n' + 'IND 5 22.1 150 129 60 0 15 4 25 12.896 3.358 10 4 63 48 1 4 0 0 545 20 0.845\n' + 'LKA 5 21 161 143 65 4 9 3 10 13.143 3.524 12 1 79 46 0 5 0 0 481 17 0.794\n'; break; case '2018-WBSC-U15': exam = 'TEAM ERA W-L SV IP G GS CG SHO H R ER BB SO 2B 3B HR AB BAvg WP HBP BK IBB SHA SFA FLD%\n' + 'USA 1.09 8-1 1 58.0 9 9 0 0 36 13 9 34 53 10 0 0 206 .175 3 9 0 2 3 1 .954\n' + 'PAN 2.22 7-2 4 60.0 9 9 0 0 32 23 19 33 55 5 1 1 207 .155 6 12 3 1 1 0 .961\n' + 'ROC 3.98 6-3 4 58.0 9 9 0 0 63 37 33 30 49 10 2 0 222 .284 8 7 3 1 6 2 .968\n' + 'JPN 4.27 5-4 2 59.0 9 9 0 0 54 42 36 34 70 14 2 2 219 .247 5 10 0 1 8 4 .965\n' + 'CUB 3.24 5-3 1 54.0 8 8 0 0 53 33 24 22 53 8 3 2 207 .256 2 8 0 2 4 1 .979\n' + 'DOM 5.94 4-4 0 53.0 8 8 1 0 51 54 45 49 37 6 4 1 197 .259 9 10 2 1 10 4 .913\n' + 'BRA 3.08 5-3 1 50.0 8 8 1 0 31 28 22 38 44 1 0 0 174 .178 10 9 2 0 3 3 .941\n' + 'NED 5.46 4-4 1 50.0 8 8 0 0 66 52 39 48 31 8 6 3 206 .320 6 8 2 1 4 0 .941\n' + 'AUS 7.14 3-5 1 50.0 8 8 0 0 69 68 51 41 30 21 2 4 207 .333 7 7 1 1 5 3 .917\n' + 'CHN 4.70 1-7 0 47.2 8 8 0 0 72 65 32 37 31 22 7 0 215 .335 11 13 0 1 6 7 .870\n' + 'GER 6.70 1-7 0 46.0 8 8 0 0 63 61 44 32 49 21 2 2 200 .315 7 11 5 0 3 2 .917\n' + 'RSA 11.43 1-7 0 45.1 8 8 0 0 76 87 74 60 27 16 7 5 208 .365 20 11 2 2 3 6 .884\n' + 'Totals 4.96 50-50 15 604.4 50 100 2 0 666 563 429 458 529 142 36 20 2468 .270 94 115 20 - 33 56 .936\n'; break; case '2019-WBSC-U18': exam = 'TEAM ERA W-L SV IP G GS CG SHO H R ER BB SO 2B 3B HR AB B/Avg WP HP BK IBB SHA SFA FLD%\n' + 'ROC 3.13 7-2 4 69.0 9 9 1 0 49 29 24 18 74 10 0 1 254 .193 6 8 1 0 1 1 .971\n' + 'USA 2.72 7-2 2 76.0 9 9 1 1 64 31 23 23 70 7 4 1 281 .228 5 7 0 2 4 1 .981\n' + 'KOR 3.69 6-3 2 78.0 9 9 1 1 77 36 32 23 86 14 3 1 295 .261 4 5 1 0 4 1 .970\n' + 'AUS 3.55 4-5 3 76.0 9 9 0 0 63 36 30 27 64 13 2 3 281 .224 9 9 0 1 5 4 .959\n' + 'JPN 1.58 5-3 1 62.2 8 8 1 0 45 23 11 17 93 4 2 1 228 .197 3 3 0 1 2 3 .966\n' + 'CAN 3.66 4-4 1 64.0 8 8 0 0 67 40 26 34 57 14 4 0 245 .273 6 4 1 0 4 2 .943\n' + 'NED 1.63 6-2 4 66.1 8 8 0 0 44 29 12 29 59 4 1 3 231 .190 7 9 0 1 3 4 .958\n' + 'ESP 3.97 3-5 0 68.0 8 8 0 0 54 39 30 49 62 14 0 2 249 .217 16 6 3 1 4 1 .966\n' + 'PAN 3.81 3-5 1 59.0 8 8 0 0 57 32 25 30 53 11 3 6 220 .259 6 9 1 1 4 2 .965\n' + 'NCA 3.77 3-5 1 62.0 8 8 0 0 71 37 26 30 50 11 0 3 242 .293 6 3 0 2 3 3 .956\n' + 'CHN 6.10 2-6 0 62.0 8 8 0 0 76 56 42 31 35 16 4 1 250 .304 10 9 0 0 2 4 .960\n' + 'RSA 15.87 0-8 0 49.1 8 8 0 0 103 107 87 54 23 14 10 2 245 .420 21 9 2 0 1 8 .896\n'; break; } var innings = o.getAttribute('data-str'); if (innings && !isNaN(innings)) { document.getElementById('pinnings').options.selectedIndex = parseInt(innings) - 5; } } document.getElementById(x + 'data').innerHTML = exam; document.getElementById(x + 'wiki').innerHTML = ''; var BTN = document.getElementsByClassName(x + '-dgpk-btn'); for (var i = 0; i < BTN.length; i++) { BTN[i].className = BTN[i].className.replace(/ dgpk-dn/g, ''); } if (o.className.indexOf(' dgpk-dn') < 0) { o.className += ' dgpk-dn'; } return false; }


[編輯] 開發記錄

  • [2018-08-14] 建立頁面。先具備大致功能,之後實際應用時再邊用邊改,走一步算一步。
  • [2018-08-22] 此程式後續功能疊床架屋,越寫越亂,也覺得最初使用的結構與流程不好,日後維護有相當難度,最好是不必再改了。