A 回答 (3件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
情報処理技術者の試験準備の学習書にアルゴリズムの項があって、そこに「マッチング」や「マージ」のことが載っています。
両ファイルがソートされておれば、両者のファイルを一読すると処理は終わるはずです。2ファイルの読み込みと結果ファイルの書き出しの時間しかかからないはずです。
これが一番シンプルな無駄の無いファイル処理だからです。
>シーケンシャルマッチングといっているが、コードが適当でないのではと思います。ファイルレコード数が非常に多いとか断片化したとしても我慢できないほどではないでしょう。
>件数が多くなればなるほど、処理時間がかかってしまうようです
原理的にミクロで考えれば当たり前です。
ーー
コードが適当か(無駄が無いか)見直すべきと推測します。
できるだけ旧BASIC的なシンプルなVBコードでやってみてはどうでしょう。
ありがとうございます。
ロジックを再度見直ししてみたいと思います。
シーケンシャルマッチング以外の方法も勉強のため知っておきたいと思い、質問させていただきました。ADOとかでも出来るようなのですが、何もわからないので、よければご指導お願いします。
No.2
- 回答日時:
#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
imogasiさんありがとうございます。
エクセルは使っていません。
wshで作成しています。
readallで配列に読み込んでシーケンシャルマッチングを行っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- Visual Basic(VBA) マクロを教えてください。 7 2023/06/01 19:47
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Visual Basic(VBA) 複数ブックの統合について Excel VBA 1 2022/05/13 09:48
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- その他(Microsoft Office) VBA CSV出力について 3 2023/04/19 14:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでCSVファイルを途中行まで...
-
VBAでCSVファイルの特定行を書...
-
openした後、closeしないでプロ...
-
JavaでCSVファイルを高速に読む...
-
__DATA__の意味
-
vNoteのBODY部の取得(長めです)
-
MATLABでのwhile文の条件について
-
VB6.0でDB接続する際に切断時の...
-
CSVが可変長の場合の検索方法
-
拡張子 ”log” と ” dat” の違い
-
ExcelをCSV書き出す場合のシー...
-
プログラミング(流れ図とコー...
-
バッチファイルの作り方(CSV→...
-
close()で例外が投げられる理由
-
batファイルでrenameができませ...
-
VBAコードを張り付け後のエクセ...
-
ListBoxのデータを高速でファイ...
-
至急お願いします。C言語で.img...
-
タブの色を変更する方法
-
vba dir の相対パス
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでCSVファイルの特定行を書...
-
ExcelをCSV書き出す場合のシー...
-
openした後、closeしないでプロ...
-
VBAでCSVファイルを途中行まで...
-
VBAで巨大なファイルの途中から...
-
ReadLineでの読み出し行を指定する
-
JavaでCSVファイルを高速に読む...
-
MATLAB グローバル変数の宣言
-
エクセルVBA コードが同じでも...
-
Perlの変数に文字数制限(容量...
-
perlで、後ろの行を読んで、前...
-
C言語でのファイルのデータ更...
-
2つのCSVファイルをマッチング
-
VB6.0でDB接続する際に切断時の...
-
CSVが可変長の場合の検索方法
-
perlで容量の大きいCSVファイル...
-
1ファイルずつ読み込みたい
-
VBScriptでファイル保存先のデ...
-
perl で googleAPIを呼び出す...
-
C#でCSVファイルを逐一更新したい
おすすめ情報