jqueryでcsvをオブジェクトに変換する

  1. <!DOCTYPE html>
  2. <html lang="ja">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>jqueryでcsvをオブジェクトに変換する</title>
  6. <script type="text/javascript" src="jquery-1.5.1.min.js"></script>
  7. <script type="text/javascript" src="knockout-2.1.0beta.js"></script>
  8. <script type="text/javascript">
  9.   jQuery.extend({
  10.     csv: function(delim, quote, lined) {
  11.       delim = typeof delim == "string" ? new RegExp( "[" + (delim || ","   ) + "]" ) : typeof delim == "undefined" ? ","    : delim;
  12.       quote = typeof quote == "string" ? new RegExp("^[" + (quote || '"'   ) + "]" ) : typeof quote == "undefined" ? '"'    : quote;
  13.       lined = typeof lined == "string" ? new RegExp( "[" + (lined || "\r\n") + "]+") : typeof lined == "undefined" ? "\r\n" : lined;
  14.       function splitline (v) {
  15.         // Split the line using the delimitor
  16.         var arr  = v.split(delim), out = [], q;
  17.         for (var i=0, l=arr.length; i<l; i++) {
  18.           if (q = arr[i].match(quote)) {
  19.             for (j=i; j<l; j++) {
  20.               if (arr[j].charAt(arr[j].length-1) == q[0]) {
  21.                 break;
  22.               }
  23.             }
  24.             var s = arr.slice(i,j+1).join(delim);
  25.             out.push(s.substr(1,s.length-2));
  26.             i = j;
  27.           }
  28.           else {
  29.             out.push(arr[i]);
  30.           }
  31.         }
  32.         return out;
  33.       }
  34.       return function(text) {
  35.         var lines = text.split(lined);
  36.         for (var i=0, l=lines.length; i<l; i++) {
  37.           lines[i] = splitline(lines[i]);
  38.         }
  39.         
  40.         // 最後の行を削除
  41.         var last = lines.length - 1;
  42.         if (lines[last].length == 1 && lines[last][0] == "") {
  43.           lines.splice(last, 1);
  44.         }
  45.         
  46.         return lines;
  47.       };
  48.     }
  49.   });
  50.   function ViewModel() {
  51.     var self = this;
  52.     var csvStr = "";
  53.     csvStr += "ねぎ間,168"         + "\n";
  54.     csvStr += "ハツ,136"           + "\n";
  55.     csvStr += "レバー,136"         + "\n";
  56.     csvStr += "ぼんちり,136"       + "\n";
  57.     csvStr += "はらみ,136"         + "\n";
  58.     csvStr += "うずら玉子,136"     + "\n";
  59.     csvStr += "なんこつ,136"       + "\n";
  60.     csvStr += "手羽先,168"         + "\n";
  61.     csvStr += "せせり,136"         + "\n";
  62.     csvStr += "白レバー,168"       + "\n";
  63.     csvStr += "丸ごとシマウマ,290" + "\n";
  64.     
  65.     var obj = $.csv(",", "", "\n")(csvStr);
  66.     
  67.     self.convert = ko.observable(obj);
  68.   }
  69.   $(document).ready(function () {
  70.     ko.applyBindings(new ViewModel());
  71.   });
  72. </script>
  73. </head>
  74. <body>
  75. <h1>jqueryでcsvをオブジェクトに変換する</h1>
  76. <ul data-bind="foreach: convert">
  77. <li><b data-bind="text: $data[0]"></b> - <span data-bind="text: $data[1]"></span></li>
  78. </ul>
  79. <p>※knockout.jsを使って出力しています</p>
  80. <div style="font-size:10pt;text-align:right;margin-top:0.5em;">
  81. <a href="//tips.recatnap.info/" target="_top">PCスキルの小技・忘却防止メモ</a> -
  82. <a href="//tips.recatnap.info/wiki/" target="_top">PCスキルの小技・忘却防止メモのまとめ(wiki)</a>
  83. </div>
  84. <div style="font-size:10pt;text-align:center;margin-top:0.5em;padding:0.5em;border-top:1px solid #ccc;">
  85. Copyright &copy; 2009 by PCスキルの小技・忘却防止メモ. All rights reserved.
  86. </div>
  87. </body>
  88. </html>