• ベストアンサー

CSVファイルに、連続した大量のデータがあり、そのうちの一部の連続した

CSVファイルに、連続した大量のデータがあり、そのうちの一部の連続したデータをとりだして、新しいCSVファイルにしたいのですが、データが莫大で、目的のデータの不要部分である、そのデータをはさんだ上部と下部を削除しようとしたのですが、ものすごく時間がかかります。 短時間で目的のデータを抜き出すには、どうしたらよろしいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.5

補足です。 そもそも20万行というのが非常に大きすぎる行数なので、どんなソフトでも、まともに読み込みや検索すると非常に時間がかかります。 私ならもっと効率の良い方法を取ります。 まず、ms単位の1行当たりの長さが同じで揃っているなら 1行の文字数×ms単位の時間=目的の時刻のデータの場所 これで、目的の時刻のデータの場所が計算できます。 1行当たりの長さが揃っていない場合は、平均的な文字数で計算すれば、少なくてもその近辺には移動できますね。 そういうプログラムは簡単に組めますが、プログラムができないなら 電卓でデータの場所を計算して、バイナリエディタでその場所に直接ジャンプすれば、一番速く処理できるんじゃないかなと思います。

JZ302
質問者

お礼

ありがとうございます。なんとかできました。

JZ302
質問者

補足

バイナリエディタって何ですか。

その他の回答 (6)

回答No.7

方法はいろいろあると思います。 1.SED や AWK が使える人ならチョチョッとできそうな処理ですね。 Windows用のフリーソフトもたくさん出ていると思いますので、興味があればダウンロードしてみてください。 2.EXCELのフィルターを使う。 20万件では時間がかかるかも 3.データベース系のソフトを使う。 レコード数を考えると一番現実的な方法でしょう。 ACCESSやApproach、FileMaker,Paradox等のデータベースソフトが ひとつくらいありませんか。 特にApproachはロータス123の付録?でついているバージョンがありますが、 非常に使いやすいソフトです。 なければシェアウェアですがTCARDといったソフトもあります。 http://www.dicre.com/soft/tcard.htm 4.テキストエディタ等 データがソートされているようですので、今まで書かれているような エディタを使う方法もありかと。

JZ302
質問者

お礼

ありがとうございます。なんとかできました。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.6

VBAについては EXCELでお仕事 というサイトに基礎から説明があり、同時にファイルの読み書きの方法の説明もあります。 ほかにできそうな手段がなければ、この機能を学習してみて下さい。

JZ302
質問者

お礼

ありがとうございます。なんとかできました。

  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.4

CSVというのはテキストデータだからテキストエディタなどで開けます。 そして、目的の時刻の文字列を検索してジャンプします。 先頭からその行までを範囲指定して削除します、末尾も同様に削除すればいいですね。 ただし、20万行以上もの行数を扱えるテキストエディタというのは、結構高度なプログラムをしなくてはいけないので、使えるソフトは限られてきますね。 私の知っているソフトで使えそうなのは、この2つかな http://hide.maruo.co.jp/software/hidemaru.html 「秀丸エディタ」 シェアウェア ・最大1000万行のファイルまで編集可能。 ・ファイルサイズは制限なし(制限は行数のみ)。 http://www.vcraft.jp/soft/bz.html 「バイナリエディタ Bz」 フリーソフト ・4GBまでのサイズのファイルが扱える ・文字列での検索も可能なので、先の時刻の文字列で検索して範囲指定して削除する事もできます。 多分、テキストエディタよりもバイナリエディタの方が、大量データの編集の点ではは高速に処理できるのではと思います。

JZ302
質問者

お礼

ありがとうございます。なんとかできました。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

エクセルのVBAを使ってプロシージャつくります。 CSVファイル(入力用:A)をOPENする CSVファイル(出力用:B)をOPENする CSVファイル(出力用:C)をOPENする Aより1行読み込む AがEOFになるまで繰り返す  Aの内容をそのままBに出力する  Aより1行読み込む AがEOFになったら CSVファイル(A)をCLOSEする CSVファイル(B)をCLOSEする CSVファイル(C)をCLOSEする 終了 基本的にはこの形を作ってみます。 あとは  「Aの内容をそのままBに出力する」 が  条件満たすとき    「Aの内容をそのままBに出力する」  条件満たさないとき    「Aの内容をそのままCに出力する」 になる感じです。 A:元のファイル B:条件あった部分だけのファイル C:条件あった部分だけ抜いたファイル セルを操作してやるよりはCSVファイル上でやる方が速いと 思われます。

JZ302
質問者

お礼

ありがとうございます。なんとかできました。

JZ302
質問者

補足

「VBA」「プロシージャ」「EOF」の意味がわからないのですが。

  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.2

CSVだったらOffice以外でも簡単に読み書きできる訳で、 Visual C++ などでコマンドラインの簡単なプログラムを組んだ方が速く処理できると思います。 そういうプログラムできる人がいるか、どこかに依頼できるかですけどね。

JZ302
質問者

お礼

ありがとうございます。なんとかできました。

JZ302
質問者

補足

そういうプログラムができる人や依頼できる人もいないので、自分でできる簡単なやり方があれば教えていただきたいのですが。

回答No.1

「目的のデータ」とは、どんな条件でくくれるのでしょうか? 莫大というのは、どれくらいの行数があるものなのでしょうか? これがわかれば、ある程度なんとかなるかもしれません。 たとえば、CSVをAccessに取り込んで絞り込むなど…。

JZ302
質問者

お礼

ありがとうございます。なんとかできました。

JZ302
質問者

補足

時間がミリセカンドで並んでいて(A列)、それぞれに計測データ(B列)が入っています。 たとえば、9時~9時30分の計測データを切り出す場合、どうしたらよいかということなんです。 全部の行数は20万行以上あります。

関連するQ&A