「CSVをWikiの表組み書式に変換する」の編集履歴(バックアップ)一覧に戻る
CSVをWikiの表組み書式に変換する - (2012/01/01 (日) 23:45:06) のソース
CSVをWikiの表組み書式に変換します テキストエリアにCSVを貼りつけて変換ボタンを押してください #javascript(){{ /* NYSL Version 0.9982 http://www.kmonos.net/nysl/ */ var CSV2WikiTable = function(root, isAtwiki) { var brPlugin; if (isAtwiki) { brPlugin = '&br()'; } else { brPlugin = '&br;'; } var idConvert = 'my_buttonconvert'; var idUndo = 'my_buttonundo'; var idTextArea = 'my_textarea'; var defaultRows = 10; var defaultCols = 10; var uLimitRows = 10; var prevText = ""; var isConverted = false; function createButton(id, value) { var button = document.createElement('input'); button.id = id; button.type = 'button'; button.value = value; return(button); } function createTextArea(id) { var textarea = document.createElement('textarea'); textarea.id = id; textarea.cols = defaultCols; textarea.rows = defaultRows; textarea.style.width = '100%'; return(textarea); } function resizeTextArea(textarea) { var lines = textarea.value.split('\n').length; var tmp = lines; for (;;) { if (tmp == uLimitRows) { tmp = lines; break; } else if (tmp === 0) { tmp = uLimitRows; break; } tmp--; } textarea.rows = tmp; } function csv2table(text) { var escape = false;/* エスケープフラグ */ var bol = true;/* 行頭フラグ */ var i = 0; var textarray = text.split(''); textarray.push(null);/* 番兵 */ for (;;) { if (bol) { textarray.splice(i, 0, '|'); i++; } var c = textarray[i]; if (c === null) {/* 番兵が見つかったので終了 */ textarray.pop(); break; } switch (c) { case ',': if (escape === false) { textarray[i] = '|'; } i++; bol = false; break; case '\"': textarray.splice(i, 1); if (escape) { if (textarray[i] == '\"') {/* エスケープされたダブルクオート */ i++; } else { escape = false; } } else { escape = true; } bol = false; break; case '\r\n': case '\r': case '\n': if (escape) {/* セル内改行 */ textarray[i] = brPlugin; i++; } else { if (bol) { textarray.splice(i - 1, 2); i--; } else { textarray.splice(i, 0, '|'); i += 2; } bol = true;/* エスケープしてないときにのみ行頭フラグオン */ } break; case '|':/* 置換する以外はその他の文字と一緒 */ textarray[i] = '|'; i++; bol = false; break; default: i++; bol = false; break; } } if (bol) { textarray.pop(); } else { textarray.push('|'); } return(textarray.join('')); } var buttonConvert = createButton(idConvert,'変換'); var buttonUndo = createButton(idUndo,'元に戻す'); var textArea = createTextArea(idTextArea); buttonConvert.onclick = function () { prevText = textArea.value; textArea.value = csv2table(prevText); isConverted = true; resizeTextArea(textArea); }; buttonUndo.onclick = function () { if (isConverted) { textArea.value = prevText; resizeTextArea(textArea); } }; textArea.onkeyup = function () { resizeTextArea(textArea); }; root.appendChild(buttonConvert); root.appendChild(buttonUndo); root.appendChild(textArea); }; /* @wikiで使うときはこっち */ var thisScript = (function (e) { if (e.nodeName.toLowerCase() === 'script') return e; return(arguments.callee(e.lastChild)); })(document); new CSV2WikiTable(thisScript.parentNode, 1); /*new CSV2WikiTable(document.documentElement);*/ }}