- ベストアンサー
javascriptでcsvの1行のカウント方法
http://blog.sorasol.co.jp/?p=13 ↑こちらのサイトのプログラムで、CSVからテーブルを作る方法を利用しています。 上記サイトの内容ですと、CSVの量が分からない場合に対応できないので、行数を数えて表示をさせたいと思っています。 perlでは、ファイル読み込み時に1行ごとに格納できたと思うのですが、javascriptではそのようなことはできるのでしょうか?調べてみたのですが、同じような記述が見当たらず、他の方法も探してみたのですが(改行の場所でカウント?など)分からなかったので、解説しているサイトなどを教えていただければと思います。 よろしくお願いします
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
JavaScriptでCSV読み込みは実際作った経験がありますので、その観点から。 > perlでは、ファイル読み込み時に1行ごとに格納できたと思うのですが、 「行」とは改行区切りでいいんでしょうか?それとも、「CSVとしての行」でしょうか? 単純な改行区切りで良ければ、split で配列に格納すればいいと思います。 (質問者さんの掲示されたサイトでもそうしています) var csv = "a,b,c\nd,e,f"; csv = csv.split(/\r\n|[\r\n]/); alert(csv.length); // 行数をalert ただし、この方法はデータに改行が含まれている時に正しく読み込めません。 CGIなどで出力していて「改行が別の文字に置き換えられている」ならこの方法でいいと思いますが、 Excelと完全互換が欲しいなら、かなり複雑です。(45行で書けますが、アルゴリズムは何度も練り直しました。) 参考URLとしては http://jsgt.org/lib/jquery/plugin/csv2table/v001/test.htm があげられます。説明を読む限りでは、ExcelのCSVとの互換性を保証しているようです。 CSVフォーマットに関しては下記サイトが参考になると思います。 CSVファイルフォーマットの解説:CodeZine http://codezine.jp/article/detail/2364 とにかく情報が少ないので、トライアンドエラーは必須です。 頑張ってください。
お礼
回答ありがとうございます。 記載していただいたsplitの使い方でうまく動きました! splitを勘違いして解釈していたようです・・ csvの改行に関して、ぱっと分からなかったのですが、 丁度記載したアドレスのページにあった lineData = str.split(CR);を利用してみたところ 行数+1の値が出てきたので、-1をして if (i < 4){ ↓ if (i < lineData.length-1){ として、解決しました。 (きちんとした意味を理解していないので もう少しよく見てみないといけませんが・・) アドレスを頂いたjquery.csv2table.jsを使ったやり方だと、 どうしてもexcelのcsvアップでは、UTF-8のプログラムで 日本語が文字化けしてしまい、うまくいかなかったので 上記の方法でいってみようと思います。 (まだmacで未確認ですが・・) プログラマが多忙なので、ちょっとした事は手伝おうと思って やってみているのですが勉強が足りないようです。 教えていただいたサイトも参考に勉強したいと思います。 本当にありがとうございました^^