[編輯] 投打數據轉換
- 直接用滑鼠複製官網投打數據並貼於本頁面裡的編輯區塊,即可轉換成 wiki 語法。
- 貼進編輯區塊的第一列必須是欄位名稱,第二列開始每一欄便是它們的對應值(按照官網順序即可,不必如範例般對齊,也不必照輸出欄位的順序填)。
- 一列是一筆記錄,欄位間以空格隔開。
- 各官網使用的欄位名稱可能不同,例如投手犯規可能叫做 BK 或 BLK 或 BULK,遇上述情況需更改其名稱以符合此處欲產生的欄位(BK)。
- 僅轉換所需欄位,用不到的欄位皆自動忽略。
- 由於根據空格判斷欄位順序,遇人名包含空格時需手動拿掉空格或以暫時填入其它字元(例如 _)再進行轉換。
- 複製、貼上時需留意欄位與值是否正確對應,尤其從 PDF 文件複製字串有時候會漏掉一些字。
- 建議複製後就直接先點擊一次「維基語法」按鈕,大致觀察其結果是否看似正常,不正常再回頭檢查哪些欄位或值有問題。
- 官網資料裡的局數若以 1/3、2/3 形式表達,需手動改成 .1、.2 再進行轉換。
- 總之,欠缺的欄位自行手動補上,例如「打擊數據」裡沒 G 與 W,就眼睛瞄一下官網資料,手動在每隊後面加上。又例如「投球數據」沒有 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 = '<S>' + (parseInt(val) < 10 ? '0' : '') + val + '</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 = '<S>' + (parseInt(val) < 10 ? '0' : '') + val + '</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] 此程式後續功能疊床架屋,越寫越亂,也覺得最初使用的結構與流程不好,日後維護有相當難度,最好是不必再改了。