質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

5回答

12130閲覧

大きな行数のCSVファイルから必要な行のみを抜き出す方法

idahopotato

総合スコア7

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2015/09/10 04:29

編集2015/09/10 05:58

2015/01/01 00:00:00,1,2,…
2015/01/01 01:00:00,2,3,…

のようなn行13列(1時間に1行増える)のcsvファイルから特定の日時のデータを抜き出す機能を作っています。

現在、こちらのサイトのライブラリを使用してcsvをまるごと配列に取得しているのですが、今後行数が4桁、5桁と増えていった場合に消費するメモリの量や読み込みにかかる時間などを考えて、「一行ずつ読み込んで必要なデータであれば配列に保持する」という手法を取ろうと思っています。

ですが、肝心の「1行ずつ読み込む」部分の作り方、ライブラリなどが(私が探した、あるいは理解が及ぶ範囲では)見つかりませんでした。

なので、CSVを1行ずつ読み込むための関数、ライブラリなど何かあれば教えていただけないでしょうか?
あるいは、csvファイルから特定の日時のデータを取り出すために他にいい方法があればご教示ください


このCSVは最大で5ファイル(同じ構成)読み込む必要があって、スマートフォンなどの非力な環境で見ることも想定しているので、全部のデータを保持するのは無謀かなと思っていました。
ですので一行読み込んで不要なデータであれば破棄して次の行へ…と繰り返せばいいのかなーと素人考えで思ったのですが(それでも時間は掛かりそうですが)そう上手くはいかなさそうですね…

現在の自分のスキルを考えて、node.jsを使ってCSVを加工する方向で試してみようと思います。
ありがとうございました

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

1行長が固定で、必要なバイト位置が計算できるなら、Ajaxでのリクエスト時にRangeヘッダをつけると、指定バイト区間だけ取得できるかも知れません。例:Range: bytes=201-500
サーバー側にそういう区間で返す機能がないと全部返ります。
1行長が不定だとどうしようもないと思います。もしAccept-Range: linesとなるようなサーバーがあれば別ですが。

なお区間で取得できた場合は、レスポンスコードが200じゃなくて206になります。

投稿2015/09/10 05:51

otn

総合スコア84533

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

JSは知らないのですが・・・参考になりますか?
ストリームを行ごとに処理

投稿2015/09/10 05:41

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2015/09/10 05:42

同じ回答がありましたね;; なかった事に・・・・mm
guest

0

unixのsedコマンドで前処理する事を検討されましたか?

sedという名前は、"Stream EDitor"から来ていて、ファイルやパイプからの文字ストリームを順に処理していくエディタです。処理速度も結構速いです(perlより機能が低い分、速度も速いです)。
特定のパターンを含む列のみを出力するといった使い方が出来ます。(パターンは正規表現で書きます)

sedでcsvファイルからの抽出をしておいて、それをjavascriptで処理すれば良いように思われます。

投稿2015/09/10 05:22

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。

こんな方法みつけたのですが、いかがでしょうか?
AJAXでCSVを読み込みJAVASCRIPTDBを使いSELECTで抽出表示する方法

投稿2015/09/10 05:09

kaputaros

総合スコア1844

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

idahopotato

2015/09/10 05:16

リンクを見させていただきましたが、一度CSVを全部読み込んでからJavascriptDBに入れなおす処理をしているみたいで、根本的な解決に至らない気がします…
kaputaros

2015/09/10 05:31

どの部分が増えた(何行目か)を知るにはStream等に全部読み込む必要があると思うのですが、 その部分も1行ずつってお考えでしょうか??
guest

0

ベストアンサー

投稿2015/09/10 05:05

anonymouskawa

総合スコア856

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

idahopotato

2015/09/10 05:13

node.jsってサーバーサイドでしたよね…なんとかクライアント側だけで完結させたいのですが… 検討してみます。ありがとうございました!
anonymouskawa

2015/09/10 05:36 編集

すみません、今ちょっと検証できる状態ではないので、リンクのみですが http://weble.org/2011/03/15/javascript-longsplit こちらとか参考になりますか? 追記 書き込んだあとで失礼します。 これだとファイルを全部読み込んでしまいますね。すみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問