by shigemk2

当面は技術的なことしか書かない

od

など。もとは、ファイルを8進数などの形式にダンプするやつ。

od -c data_cr.csv | tail -5
0000640 212 237   "   ,   " 346 265 267 344 270 212 350 255 267 350 241
0000660 233 344 273 273 345 213 231   "   ,   "   3   4   5   "   ,   "
0000700   3   4   5   "   ,   "   3   4   "   ,   "   3   4   "   ,   "
0000720   0   "   ,   "   0   "   ,   "   0   "  \r

どちらかというと、cat -eよりも文字コードの確認はしやすい。

cat -e data_cr.csv | tail -5
"M-fM-^WM-%M-dM-;M-^X","M-gM-5M-^PM-fM-^^M-^\","M-iM-^AM- M-eM->M-^A","M-gM-^GM-^CM-fM-^VM-^Y","M-eM-<M->M-hM-^VM-,","M-iM-^KM-<M-fM-^]M-^P","M-cM-^CM-^\M-cM-^CM-<M-cM-^BM--","M-iM-^VM-^KM-gM-^YM-:M-hM-3M-^GM-fM-^]M-^P","M-iM-+M-^XM-iM-^@M-^_M-dM-?M-.M-eM->M-)M-fM-^]M-^P","M-iM-+M-^XM-iM-^@M-^_M-eM-;M-:M-iM-^@M- M-fM-^]M-^P"^M"2014-12-14 08:04:36","M-eM-$M-'M-fM-^HM-^PM-eM-^JM-^_","M-fM-0M-4M-dM-8M-^JM-fM-)M-^_M-eM-^_M-:M-eM-^\M-0M-eM-;M-:M-hM-(M--^Mtest","828","0","345","345","0","1","0"^M"2014-12-14 08:19:08","M-fM-^HM-^PM-eM-^JM-^_","M-iM-^UM-7M-hM-7M-^]M-iM-^[M-"M-gM-7M-4M-gM-?M-^RM-hM-^HM-*M-fM-5M-7","0","100","30","0","0","0","0"^M"2014-12-15 22:55:59","M-fM-^HM-^PM-eM-^JM-^_","M-iM-^UM-7M-hM-7M-^]M-iM-^[M-"M-gM-7M-4M-gM-?M-^RM-hM-^HM-*M-fM-5M-7","0","100","30","0","0","1","0"^M"2014-12-15 22:56:09","M-eM-$M-'M-fM-^HM-^PM-eM-^JM-^_","M-fM-5M-7M-dM-8M-^JM-hM--M-7M-hM-!M-^[M-dM-;M-;M-eM-^KM-^Y","345","345","34","34","0","0","0"^M

csv2tableで改行コードCRのCSVファイルを読み込むと死ぬ

CSVの改行コードによって、挙動が変わる問題

表題のとおりですが、例によって、とりあえずこういう感じのCSVを用意する。

"日付","結果","遠征","燃料","弾薬","鋼材","ボーキ","開発資材","高速修復材","高速建造材",
"2014-12-14 08:04:36","大成功","水上機基地建設
test","828","0","345","345","0","1","0",
"2014-12-14 08:19:08","成功","長距離練習航海","0","100","30","0","0","0","0",
"2014-12-15 22:55:59","成功","長距離練習航海","0","100","30","0","0","1","0",
"2014-12-15 22:56:09","大成功","海上護衛任務","345","345","34","34","0","0","0",

htmlはこんな感じ。

<html>
  <header>
    <script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
    <script src="./csv2table.mk2.js" type="text/javascript" charset="utf-8"></script>
  </header>
  <body>
    <h3>CR</h3>
    <div id="view0"></div>
    <script>
      $(function(){
      $('#view0').csv2table('./data_cr.csv');
      });
    </script>
    <h3>LF</h3>
    <div id="view1"></div>
    <script>
      $(function(){
      $('#view1').csv2table('./data_lf.csv');
      });
    </script>
    <h3>CRLF</h3>
    <div id="view2"></div>
    <script>
      $(function(){
      $('#view2').csv2table('./data_crlf.csv');
      });
    </script>
  </body>
</html>

LFとCRLFのCSVは問題ないけど、CRのCSVは見た目がおかしい。

f:id:shigemk2:20150613152351p:plain

これはcsv2tableの問題ではなく、むしろjQuery本体の問題っぽい。

csv2tableの175行目に、get()を使っている箇所があるけど、

       $.get(fetch_url,"",function(data,textStatus){

もうココの時点でconsole.logしたら改行コードによって挙動が変わってしまっている。しかも、CRだと改行もまるごと潰れてしまっているので、若干お手上げ気味。

CRベースのシステムなんて最近だと見当たらないから、無視したらいいっていう選択肢もあるっちゃあるかもしれないけど…

なお、CSV内のデータに改行がある場合は、
に置換するかどうか選べるようにしました。

csv2table.mk2.js