
今、フローチャートについて勉強していますが、
ファイルの併合処理について、分からないところがあります。
~問~
ファイルAとファイルBは昇順に並んでいます。この2つのファイルを併合して出力ファイルCを作成するフローチャートを作成。(キーは00~10)
もしファイルAとファイルBに重複したキーのレコードがある場合は
ファイルAのレコードのみをファイルCに出力し、エラー表示を行う。
大まかな流れは
開始→ファイルAオープン→ファイルBオープン→出力ファイルCオープン→併合処理の本処理→ファイルAクローズ→ファイルBクローズ→出力ファイルCクローズ→終了
だと思うのです。
問題は、併合処理はどういって組むか分からない部分と
出力ファイルCにどうやってA,Bのファイルのキーの数字を入れればよいか(書けばいいか)分かりません。
フローチャートの記号は一折把握していますが、ファイル関連はネットでも手元の書物でもあまり書いていませんでした。
どうかよろしくお願い致します。

No.4ベストアンサー
- 回答日時:
>問題は、併合処理はどういって組むか分からない部分と
質問者さんは、以下のように指示された時、どうしますか?
---------------------
1組のトランプからスペードのK(キング)、A(エース)、2~10、ハートのK、A、2~10を取り出し、スペードの山、ハートの山を作りました。
それぞれの山からランダムに4枚づつを抜き出して破棄し、7枚づつ、14枚のカードを残しました。
それぞれの山を、山ごとに、数字の小さい順に並べました。上から順にカードをめくれば、小さい数字⇒大きい数字、になっています。
数字の大小は、Kが一番小さく、次がA、次が2で、10が一番大きい事にします。
この2つの山を、数字が小さい順に並んだ1つの山にまとめなさい。
なお、スペードとハートで同じ数字があったら、ハートのカードは捨てて、スペードのカードだけ残しなさい。
また、カードは上から順番に1枚しかめくれません。
更に、めくったカードは、元に戻してはいけません。
---------------------
実際にトランプ(トランプでなく、メモ用紙に2種類の数字を書いただけでも良いけど)を用意し「自分の手で、1山にまとめてみる」と良いでしょう。
そして、その時に「何をどう判断して、どういう行動をしたか?」を、文章で書き出してみましょう。
そして「判断した内容」「やった事」を、元の問題文に置き換えてみましょう。
例えば「スペードの山とハートの山の1番上のカードの数字を見比べ、スペードとハートの数字が等しいかどうか⇒ファイルAから読み込んだレコードのキーと、ファイルBから読み込んだレコードのキーを比較し、キーが等しいかどうか」のように。
あとは、書き出した文章に「フロー図記号」を付けて、行動した順番に線で結ぶだけです。
実は、上記の「トランプ遊び」は、実質的に「ファイルAとファイルBは昇順に並んでいます。この2つのファイルを併合して出力ファイルCを作成する」のと、まったく同じなのです。
フローチャートにしてみると「まったく同じ構造のフローチャート」になります。
>出力ファイルCにどうやってA,Bのファイルのキーの数字を入れればよいか(書けばいいか)分かりません。
「フローチャートを書けばよい」のであって「実際のプログラムで、ファイルCにキー付きで書き込む方法をどうすれば良いか」までは要求されていません。
そんな事は「実際にプログラムをコーディングするプログラマに任せれば良い」のであって、フローチャートを書く設計者が考える事ではありません。
フローチャートには
「ファイルAから読み込んだレコードのキーと、ファイルBから読み込んだレコードのキーを比較し、キーが等しいかどうか」
とか
「ファイルAから読んだレコードをファイルCに書き込む」
とか
「ファイルBから読んだレコードをファイルCに書き込む」
とかって書くだけです。
>フローチャートの記号は一折把握していますが、ファイル関連はネットでも手元の書物でもあまり書いていませんでした。
「実際にファイルを操作するプログラミング法」は「フローチャートには完全に無関係」ですよ。無関係なんだから書いてある訳ありません。
こういう「関係ない事で悩む」のは、たとえて言えば「どうすれば数字が順に並んだトランプの山を作れるだろう?」と考え「トランプを指で掴むには、指の筋肉を動かさないとならない。俺、指の筋肉の構造がどうなっているのか判らない。さあ困った」って悩んでいるのと同じです。
指の筋肉の構造を知らなくたって、赤ん坊でも老人でも、指を動かす事は出来ます。
前述のトランプ遊びも、数字が比較出来て、最終目的さえしっかり理解できれば、マージソートもフローチャートも何も知らない、コンピュータなんか触った事も無いような人でも目的を達成出来ると思います。出来ないのは「数字が読めない人」と「数字の大小が判らない人」だけです。
まさか、質問者さんは「さっきのトランプ遊び、目的達成できない」とか言いませんよね?
No.5
- 回答日時:
>大まかな流れは
>開始→ファイルAオープン→ファイルBオープン→出力ファイルCオープン→併合処理の本処理→ファイルAクローズ→ファイルBクローズ→出力ファイルCクローズ→終了
>だと思うのです。
この問の肝は併合部分だと思いますので瑣末な問題ですが、この流れは余り良くないと思います。
ファイルA、Bの読込み、ファイルCへの出力が、併合処理と直結してループしています。ファイルアクセスは併合処理とは別に行い、入出力情報はバッファへ保持しておく方が良いでしょう。
開始→ファイルAオープン→ファイルA読込み→ファイルAクローズ→ファイルBオープン→ファイルB読込み→ファイルBクローズ→併合処理の本処理→出力ファイルCオープン→併合結果出力→出力ファイルCクローズ→終了
ファイルxxオープン→ファイルxx読込み→ファイルxxクローズ
の部分は、モジュール化でしょうか。
何にせよ、不必要なファイルアクセス状態の継続は良いことではありません。
No.3
- 回答日時:
外部ソート(マージソート)で調べてみてください。
基本的には、
1. 最初に、A、B、それぞれから1行ずつ読んでおく
2. A、B、どちらかのデータが無くなるまで、以下の繰り返し
・Aのキーの方が小さい →Aのデータを出力し、Aを1行読み込む
・Bのキーの方が小さい →Bのデータを出力し、Bを1行読み込む
・AとBのキーは等しい →Aのデータを出力し、A、B両方を1行読み込む。エラーを表示。
3. A、B、どちらか残ってる方のデータを全部出力
という流れになります。
あと、ファイル入出力のフローチャート記号は平行四辺形です。
http://masudahp.web.fc2.com/flowchart/flow01.html
No.2
- 回答日時:
こんにちは
ANo.1です。
細かいところは判らないけれど、ファイルCにエラー情報を出力しているように併合するファイルを(例えばファイルD)アペンドモードでオープンしてエラー以外の時に書き出せばよいのでは?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数ブックの統合について Excel VBA 1 2022/05/13 09:48
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- Excel(エクセル) Excel同士のデータの突合 3 2023/08/07 16:34
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Excel(エクセル) Excelのマクロについてご教授ください 2 2023/02/25 09:43
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
【C#】リソースファイルの埋め...
-
C言語のfopenについて教えてく...
-
ドラッグアンドドロップでファ...
-
SGファイルって何ですか?
-
ファイル名の先頭にアンダース...
-
COBOLでの可変長定義について
-
最近使ったファイルからファイ...
-
Cでのネットワークファイルの読...
-
ExcelVBA 定数宣言を外部ファイ...
-
VB.NETによるプロセス間通信
-
EXEファイルに画像ファイルの埋...
-
fopenできる上限の変更
-
スレッドの優先度を下げる方法。
-
EOFについて
-
エクセルVBAでフォルダ内の重複...
-
2つのCSVファイルの比較
-
csvファイルを開かずに文字を検...
-
CSVファイルへの保存の際、デー...
-
VBに、Cのincludeのようなもの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
csvファイルを開かずに文字を検...
-
バッチで118項目のCSVを処理し...
-
CSVファイルへの保存の際、デー...
-
グローバル変数のよくない使い...
-
テキストファイルの最終行を削...
-
ドラッグアンドドロップでファ...
-
VB.NETによるプロセス間通信
-
VBAにてEXCEL以外のファイル(テ...
-
分割コンパイルの#defineについて
-
ファイルの結合
-
iniファイルに追記がしたいです。
-
VBに、Cのincludeのようなもの...
-
動画処理のライブラリについて
-
Cでのネットワークファイルの読...
-
ダイアログボックスで複数フォ...
-
C言語のfopenについて教えてく...
-
「VBScript」ADODB.Streamにお...
-
マウスポインタの変更
おすすめ情報