VBAでプログラムを組みたいのですが、アドバイスをください。


数値データを2進数にし、その中から110011のような特定の文字列が最初に出てくるのはどこかを検索するプログラムを作成したいです。(プログラムの一部につき他プログラムを使うことはNG)

文字列データとして開いてInStrを使うとファイルを開くのにものすごい時間がかかってしまいます。一方、バイト型配列に突っ込むという形をとれば、比較的短時間で5GBのデータを読み込めるのですが、検索がうまくいかず。

以下の条件の元で作成する場合、どうしたらいいかアドバイスをください。
①検索対象となる元データは、10進数で表された整数で、かなりでかい(最低でも500MB,時には30GB以上)
②100,111,001とあり検索するのが001だったら、3つ目の001だけでなく、その前に出てくる00,1も合致するものとしたい
③出来ればVBAを使いたい(VBAしか書けないので)
ただし、VBA上で参照設定をしてVB2005など使うことはOK。

プログラムに関してはほとんど知識が無いので、丁寧な回答をつけてくださると嬉しいです。
よろしくおねがいします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/07/01 22:19:36
  • 終了:2012/07/08 22:20:03

回答(0件)

回答はまだありません

  • id:TransFreeBSD
    どう答えようか迷う感じですが。
    そもそも、検索は場合によってかなり時間のかかる処理です。
    現状どんな状況でしょう。明らかに時間がかかりすぎるということなのか、とにかく効率よくできる方法が必要なのか。

    規模的にgrepとか専用の外部プログラムでインデックス(何バイト目にそれが現れるか)を作ってそれを参照する方がよいと思うのですが。
    あと、どの程度の頻度で行うのか分かりませんけれど、システムやハードのチューンもあり得るので、どの程度までできるのかとか。
    あと、元データの形式はいじれるのかとか。生成時にはインデックスを作れないのかとか。

    そういう方面で検討する方が現実的な規模の気がします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません