- ベストアンサー
2つのmdbファイルから読み取り表示
お力を貸して下さい。 2つのmdbファイルから読み取り昇順に表示させたいんです。 <ファイル1.mdb> | <ファイル2.mdb> 11111 | 22222 33333 | 44444 55555 | 66666 77777 | 88888 99999 | 上記のような2つのファイルがあるとします。 両方を読み込み下記の様にcsvヘ出力したいんです。 <出力.csv> 11111 22222 33333 44444 55555 66666 77777 88888 99999 /////////////////////////////////////////////////////////////// この場合、 if(ファイル1.mdb < ファイル2.mdb) if(ファイル1.mdb > ファイル2.mdb) if(ファイル1.mdb == ファイル2.mdb) により判別しフェッチで1行ずつ読み取り出力していくという形をとっています。しかし、ファイル1とファイル2のレコード数が違い、先にファイル2がEOFになってしまいファイル1の最後の数字"99999"が出力されません。 この最後の行を表示するプログラムを教えていただけませんか? VCにて作成中です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じじゃダメ? 両方から 1個ずつ読み込む while (どちらも読み込めた) { if (データ1 < データ2) { データ1 を出力 ファイル1 から読み込む } else { データ2 を出力 ファイル2 から読み込む } } while (ファイル1 にデータが残っている) { データ1 を出力 ファイル1 から読み込む } while (ファイル2 にデータが残っている) { データ2 を出力 ファイル2 から読み込む } コード上は無駄がありそうだけど実際にはほとんど無駄はないはず.
その他の回答 (2)
- ddnp009
- ベストアンサー率25% (15/58)
アイデアとして。 mdbファイルは良くわからんけど、databaseですよね(MSAccessかな)。 レイアウトが一致するなら、レコード繋げた一時テーブルを適当なキーで昇順に並べ、 その結果を出力すればいいんでない? プログラム作ってやるんだったら、 std::vectorにでも入れてソートして (面倒ならstd::set or multisetにでも放り込んで)、 ostreamに流してやればいいんじゃないかなあ? #レコード全件を収めきれるか、マシンと相談次第。 #何で1レコードずつ捌いているのか不明。方法が指定されてる?
- FAY
- ベストアンサー率49% (95/193)
あなたが組んだプログラムの出力と終了の判定の部分を載せてください。 そのほうが回答者としては回答しやすいです。
補足
すいませんでした。 質問のif分、フェッチの後に if(ファイル1.mdb == EOF){ fput(ファイル2.mdb,fout); } if(ファイル2.mdb == EOF){ fput(ファイル1.mdb,fout); } としております。 よろしくお願いします。