数値データを2進数にし、その中から110011のような特定の文字列が最初に出てくるのはどこかを検索するプログラムを作成したいです。(プログラムの一部につき他プログラムを使うことはNG)
文字列データとして開いてInStrを使うとファイルを開くのにものすごい時間がかかってしまいます。一方、バイト型配列に突っ込むという形をとれば、比較的短時間で5GBのデータを読み込めるのですが、検索がうまくいかず。
以下の条件の元で作成する場合、どうしたらいいかアドバイスをください。
①検索対象となる元データは、10進数で表された整数で、かなりでかい(最低でも500MB,時には30GB以上)
②100,111,001とあり検索するのが001だったら、3つ目の001だけでなく、その前に出てくる00,1も合致するものとしたい
③出来ればVBAを使いたい(VBAしか書けないので)
ただし、VBA上で参照設定をしてVB2005など使うことはOK。
プログラムに関してはほとんど知識が無いので、丁寧な回答をつけてくださると嬉しいです。
よろしくおねがいします。
コメント(1件)
そもそも、検索は場合によってかなり時間のかかる処理です。
現状どんな状況でしょう。明らかに時間がかかりすぎるということなのか、とにかく効率よくできる方法が必要なのか。
規模的にgrepとか専用の外部プログラムでインデックス(何バイト目にそれが現れるか)を作ってそれを参照する方がよいと思うのですが。
あと、どの程度の頻度で行うのか分かりませんけれど、システムやハードのチューンもあり得るので、どの程度までできるのかとか。
あと、元データの形式はいじれるのかとか。生成時にはインデックスを作れないのかとか。
そういう方面で検討する方が現実的な規模の気がします。