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

ソート済みの2つのCSVデータをシーケンシャルマッチングし、お互いの不一致レコードと一致したレコードとをそれぞれ別ファイルに出力するwshを作成しました。
件数が多くなればなるほど、処理時間がかかってしまうようです。
シーケンシャルマッチング以外の方法で効率のよい方法はないでしょうか?
最近勉強を始めたばかりの初心者ですが、宜しくお願いします。

A 回答 (3件)

情報処理技術者の試験準備の学習書にアルゴリズムの項があって、そこに「マッチング」や「マージ」のことが載っています。


両ファイルがソートされておれば、両者のファイルを一読すると処理は終わるはずです。2ファイルの読み込みと結果ファイルの書き出しの時間しかかからないはずです。
これが一番シンプルな無駄の無いファイル処理だからです。
>シーケンシャルマッチングといっているが、コードが適当でないのではと思います。ファイルレコード数が非常に多いとか断片化したとしても我慢できないほどではないでしょう。
>件数が多くなればなるほど、処理時間がかかってしまうようです
原理的にミクロで考えれば当たり前です。
ーー
コードが適当か(無駄が無いか)見直すべきと推測します。
できるだけ旧BASIC的なシンプルなVBコードでやってみてはどうでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ロジックを再度見直ししてみたいと思います。
シーケンシャルマッチング以外の方法も勉強のため知っておきたいと思い、質問させていただきました。ADOとかでも出来るようなのですが、何もわからないので、よければご指導お願いします。

お礼日時:2009/12/11 10:17

#1です。

もうひとつ#1を書いた後に心配したのは、テキストファイルを一旦エクセルシートに読み込んで処理し、書き出しもエクセルのシートに行っていないでしょうね。
これをやるとデータ行数が多くなると、テキストデータのデータをシートにセットする時間がかかると思います。
ソートもエクセルを使わないと、自作するかしかないのが現状かも知れないので、ひょっとして、エクセルを使ってないか心配したのです。
オフコンや大型コンのソフト群には、独立したオフライン実行用のソートマージプログラムは必ず付いていましたが、MS(エクセル・アクセス・VB)などはそういう考えではなく添付されてない。
またADOやその他仕組みのあるDBソフトのものは、仕組みの分だけ重くなる恐れはあると思う。
ーー
マージのサンプル
質問はCSVファイルなので、下記そのままではうまく行かないだろう。キー項目を別変数にセットするなどして比較処理する必要があろう。
またハイバリュー999(下記ではキーが文字列で3桁数の文字列の例)はデータの有様によって変える必要がある。
更新は下記でe1のところで行うもの(略)
旧Basic的といったのは、こういうもの。
エクセルの標準モジュールで下記データでテスト済み。
コード
Sub test01()
Open "input01.txt" For Input As #1
Open "input02.txt" For Input As #2
Open "outpt02.txt" For Output As #3
bothread = "y"
r1:
If EOF(1) Then
d1 = "999"
GoTo cmp
End If
Input #1, d1
If bothread = "n" Then GoTo cmp
bothread = "n"
r2:
If EOF(2) Then
d2 = "999"
GoTo cmp
End If
Input #2, d2
cmp:
If d1 > d2 Then GoTo h1
If d1 = d2 Then GoTo e1
If d1 < d2 Then GoTo l1
h1:
Print #3, d2
GoTo r2
e1:
If d1 = "999" Then GoTo end1
Print #3, d2
GoTo r2
l1:
Print #3, d1
GoTo r1
end1:
Close #1
Close #2
Close #3
End Sub
ーーーー
input01.txt(文字列の例)メモ帳で作成
1
3
8
10
13
15
ーーー
input02.txt メモ長で作成
5
6
8
9
13
16
17
20
ーーー
結果 メモ帳で確認
1
3
5
6
8
8
9
10
13
13
15
16
17
20
    • good
    • 0
この回答へのお礼

imogasiさんありがとうございます。
エクセルは使っていません。
wshで作成しています。
readallで配列に読み込んでシーケンシャルマッチングを行っています。

お礼日時:2009/12/14 13:46

2分探索法で検索されるといいかもしれません。

    • good
    • 0

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