アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

短時間で目的のデータを抜き出すには、どうしたらよろしいでしょうか。

A 回答 (7件)

補足です。


そもそも20万行というのが非常に大きすぎる行数なので、どんなソフトでも、まともに読み込みや検索すると非常に時間がかかります。
私ならもっと効率の良い方法を取ります。
まず、ms単位の1行当たりの長さが同じで揃っているなら

1行の文字数×ms単位の時間=目的の時刻のデータの場所

これで、目的の時刻のデータの場所が計算できます。
1行当たりの長さが揃っていない場合は、平均的な文字数で計算すれば、少なくてもその近辺には移動できますね。
そういうプログラムは簡単に組めますが、プログラムができないなら
電卓でデータの場所を計算して、バイナリエディタでその場所に直接ジャンプすれば、一番速く処理できるんじゃないかなと思います。

この回答への補足

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

補足日時:2010/09/03 15:12
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/09/03 20:08

方法はいろいろあると思います。



1.SED や AWK が使える人ならチョチョッとできそうな処理ですね。
Windows用のフリーソフトもたくさん出ていると思いますので、興味があればダウンロードしてみてください。

2.EXCELのフィルターを使う。
20万件では時間がかかるかも

3.データベース系のソフトを使う。
レコード数を考えると一番現実的な方法でしょう。
ACCESSやApproach、FileMaker,Paradox等のデータベースソフトが
ひとつくらいありませんか。
特にApproachはロータス123の付録?でついているバージョンがありますが、
非常に使いやすいソフトです。
なければシェアウェアですがTCARDといったソフトもあります。
http://www.dicre.com/soft/tcard.htm

4.テキストエディタ等
データがソートされているようですので、今まで書かれているような
エディタを使う方法もありかと。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/09/03 20:07

VBAについては


EXCELでお仕事
というサイトに基礎から説明があり、同時にファイルの読み書きの方法の説明もあります。

ほかにできそうな手段がなければ、この機能を学習してみて下さい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/09/03 20:07

CSVというのはテキストデータだからテキストエディタなどで開けます。


そして、目的の時刻の文字列を検索してジャンプします。
先頭からその行までを範囲指定して削除します、末尾も同様に削除すればいいですね。
ただし、20万行以上もの行数を扱えるテキストエディタというのは、結構高度なプログラムをしなくてはいけないので、使えるソフトは限られてきますね。
私の知っているソフトで使えそうなのは、この2つかな

http://hide.maruo.co.jp/software/hidemaru.html
「秀丸エディタ」 シェアウェア
・最大1000万行のファイルまで編集可能。
・ファイルサイズは制限なし(制限は行数のみ)。

http://www.vcraft.jp/soft/bz.html
「バイナリエディタ Bz」 フリーソフト
・4GBまでのサイズのファイルが扱える
・文字列での検索も可能なので、先の時刻の文字列で検索して範囲指定して削除する事もできます。

多分、テキストエディタよりもバイナリエディタの方が、大量データの編集の点ではは高速に処理できるのではと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/09/03 20:10

エクセルの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ファイル上でやる方が速いと
思われます。

この回答への補足

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

補足日時:2010/09/03 01:04
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/09/03 20:09

CSVだったらOffice以外でも簡単に読み書きできる訳で、


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

この回答への補足

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

補足日時:2010/09/03 00:07
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/09/03 20:10

「目的のデータ」とは、どんな条件でくくれるのでしょうか?


莫大というのは、どれくらいの行数があるものなのでしょうか?

これがわかれば、ある程度なんとかなるかもしれません。
たとえば、CSVをAccessに取り込んで絞り込むなど…。

この回答への補足

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

補足日時:2010/09/02 23:25
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/09/03 20:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!