• ベストアンサー

一般的なプログラムの作り方

こんにちは。 あるプログラムをVC++にて作成しようとしています。 このプログラムは、入力ファイルからテキストを読み込み、編集してから、出力ファイルを生成するというものです。出力ファイルは新規の場合と、上書きの場合があります。 そこで質問なのですが、プログラムの作り方として、以下のパターンが考えられるのですが、どちらが一般的なのでしょうか。 【パターン1】 入力ファイルからのテキスト読み込み、編集及び出力ファイルの生成を同時に行う。 ・長所として考えられる点 メモリ内で持つデータが一時的な領域なため、構造がシンプルでメモリ使用量も少ない。 ・短所として考えられる点 処理の開始から終了まで、出力ファイルを開いたままにするため、他から出力ファイルを編集できない時間が長くなる。 【パターン2】 入力ファイルからのテキスト読み込み、編集が全て完了してから、一括で出力ファイルへ書込む。 ・長所として考えられる点 出力ファイルへアクセスする時間が短くてすむ。 ・短所として考えられる点 メモリ内で全て編集するため、メモリ使用量が増大かつ構造が複雑になる。 以上です。アドバイスなどありましたら、よろしくお願いいたします。 【環境】 Windows XP Professional 入力ファイルのデータ量:10MB程度 出力ファイルのデータ量:1MB程度

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

全部読み込みしないと、編集できないという処理でもないみたいだし、1でいいんじゃないですかね。 >処理の開始から終了まで、出力ファイルを開いたままにするため、他から出力ファイルを編集できない時間が長くなる。 については、読み込みを開始した時点で、ファイルの更新が始まったということですから、逆に、出力ファイルを編集させるような処理を受け付けたらだめだと思います。 ファイルの出力時間については、実測してみて、耐えられないようなら、パターン2で考えてみるといいと思います。昨今のマシンで10MB程度のメモリ使用が問題ないなら、特に問題ないと思います。パターン1で構造が簡単でメモリ上にファイルを展開すると構造が複雑ということもないような気がします。逆に、実行時の環境で作業メモリが確保できないようなら、パターン2は選択できないことになりますね。 結局何を重視するかで違ってくるかと思いますが。

kerberos_001
質問者

お礼

ご回答ありがとうございます。 >逆に、出力ファイルを編集させるような処理を受け付けたらだめだと思います。 この点に気づきませんでした。パターン2の場合は、出力する時だけ、排他制御すればよいかと思ってましたが、基本的にはアプリケーションが動作する前提として排他処理を取っておく必要があるのですね。 どうもありがとうございました。

その他の回答 (3)

  • mth-mmk
  • ベストアンサー率38% (35/90)
回答No.4

一般的にはパターン1です。今はテキストファイルの量に比べて、メモリが多いので余り気にしなくても良いのですが、元々は少ないメモリでやりくりすることが多かったので、パターン1のやり方が普通になってます。 仮に全部読み込まないと処理が行えない場合でも中間ファイルを介したり、メモリマップドファイルにすると言う方法があります。 シーケンシャルでアクセスする場合はI/Oの速度にも依存しますがある一定以上のメモリバッファを持っても速度は余り変わりません。つまりファイルサイズ分のバッファを持っても速度上のメリットはあまり無いと考えられます。また一度に大きなファイルを読み込むと(OSのメモリスワップなどが発生し)逆に遅くなるケースがあります。

kerberos_001
質問者

お礼

ご回答ありがとうございます。 >一度に大きなファイルを読み込むと(OSのメモリスワップなどが発生し)逆に遅くなるケースがあります。 なるほど~とりあえずはパターン1で試してみたいと思います。 どうもありがとうございました。

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.2

もとのファイルの内容、編集の内容、出力ファイルの内容によって違うので、 どっちとも言えないですねえ。 たとえば、テキスト加工ツールとして使われている多くのものは1の方法です。 ただし、対話的編集をするエディタなどは2の方法になります。 他から出力ファイルを編集することの頻度にもよります。 もしかするとCGIかなんかを作っているのでしょうか。 あと、編集がどの程度複雑なものかでも違います。 そのプログラムを動かす頻度なども。 個人的には、まず1の方式を考えます。 編集内容が単純(たとえば、あるタグの行だけ抜き出すなど) なら1で良いのではないでしょうか。 複雑な場合はいろいろ考えて(場合によっては時間を計測して)決めることになります。

kerberos_001
質問者

お礼

ご回答ありがとうございます。 なるほど、一般的にはパターン1の方法なのですね。 >もしかするとCGIかなんかを作っているのでしょうか。 VC++を使ってWindows上で動作するアプリケーションを作成しています。出力ファイルを更新する頻度は少ないと思いますので、パターン1で作ってみようかと思います。 ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

パターン1 でいいんじゃないかなぁ? ど~せプログラムが動いている間は出力ファイルを書換えられないんだし.

kerberos_001
質問者

お礼

ご回答ありがとうございます。 シンプルですが的を得たご回答 とても参考になりました。 ありがとうございます。

関連するQ&A

  • あるプログラムから別のをプログラムを操作する方

    Windows XPにおいて、ソフトAがあるとします。 このソフトAは実行時に、テキストボックスと実行ボタンからなるウィンドウから構成され、 実行ボタンを押すと、テキストボックスの入力に応じた、特別なファイルを生成します。 現在、「テキストボックスへの入力」「実行ボタンのクリック」を手動で行っているのですが、作業量が多いため、自動で行いたいと考えています。 具体的には、テキストボックスに入力したい文をあらかじめテキストファイルにまとめて作成しておき、自動で次々とファイルを生成したいと思います。 キーボードやマウスの操作を記憶するフリーソフトを試してみましたが、ウィンドウの位置を合わせなくてはならない、実行中他の操作が一切できない、実行中の進行具合が見づらい、テキストファイルのエラーチェックができないなど、こまごまとした点で不満が残ります。 そこで、自分でプログラムを作成し、ソフトAを操作するようなプログラムを作りたいと思うのですが、どのようなものが必要でしょうか?

  • 画像のリサイズソフトを探しています!

    色々な画像編集ソフトを使ってきましたが、どれもしっくり来ません。 これは私の主観に基づく評価です。意味が分からなかったら指摘して貰えると嬉しいです。 --------------------------------------------------------------------------  使ったことのあるソフト、ツール <縮小専用。> 長所:  ドラッグアンドドロップでファイル出力  自動でフォルダが生成されそこにファイルが出力される  カーソルの移動量が少ない(←重要 短所:  拡大ができない <photoshifter> 長所:  拡大縮小ができる(縦横比維持のOn/Offも) 短所:  カーソルの移動量が多すぎて不便  ドラッグアンドドロップでファイルの追加はできるが、ダイレクトに出力できない  フォルダの自動生成保存ができない <GIMP 画像の拡大・縮小> 長所:  綺麗に拡大縮小ができる(縦横比維持のOn/Offも)  入力された数字に応じて縦(横)サイズが変わる 短所:  GIMP本体の起動が面倒くさい  ドラッグアンドドロップできない  フォルダの自動生成保存ができない -------------------------------------------------------------------------- そして私が求めているのは以下のような機能があるリサイズソフトです。 ・ピクセル指定でリサイズできる ・拡大縮小ができる(縦横比維持のOn/Off) ・jpegのクオリティ指定ができる ・ファイルサイズ指定が出来る ・フォルダを作ってファイルを保存 ・ドラッグアンドドロップでダイレクトにファイル出力 ・カーソルの移動量が少ない ・一括変換できる もしご存じでしたらぜひ教えてください。 回答お待ちしております。

  • マイクロコンピュータのプログラムについて

    TK-85にプログラムを入力する実験を先日やったんですけど、そこで直接番地指定と間接番地指定(メモリ番地をHLレジスタで指定する)の2つの方法をしました。この2つの方法の長所と短所をそれぞれ教えて欲しいです。 あとプログラムを短くしたり、実行速度を早くしたりする方法があればぜひ教えて欲しいです。

  • ヒストグラムのプログラム

    乱数で入力されたテキストファイル読み込んでヒストグラムを出力するCプログラムが分かりません。 現在、乱数のテキストファイル作成まで出来ました。 ぜひ教えてください。よろしくお願いします。

  • メモリをたくさん使うテストプログラム

    Linuxで、メモリをたくさん使うようなテストプログラムを作りたいのです。 メモリといっても、プログラムコードの入っているテキスト領域、データの入っているデータ領域、ヒープ領域などがあると思いますが、 これらのいずれかのみをたくさん使うようなプログラムを作りたいのです。 例えば、サイズの大きなプログラムであれば、テキスト領域が大きくなったり、 大容量の文字列を扱ったりすると、データ領域が大きくなったりするんでしょうか? 関数とメモリ使用量の関係があまり分かっていません。 どうか教えてください。

  • 重複チェックプログラム

    ご経験ある方いらっしゃいましたらアドバイスください。 環境:linux, gcc 64bitの整数データ(符号なし)を入力とし、64bitの整数データを出力する関数を作成中です。 入力データに対して、出力データは絶対に重複しないという条件で関数を作成したのですが、 (入力と出力は1対1になる) その条件のチェックができない状態で困っています。 試した方法は、以下のとおりです。 (1)すべての入力データに対する出力データをテキストファイルに書き出す。 (2)再びすべての入力データを計算するのだが、今度は出力データを(1)で作成したテキストファイルと比較していく。 そのときテキストファイル内に出力データと同じデータが2つ以上あれば重複が存在する。 しかし、(1)の時点でlinuxのファイル制限2.1GBに引っかかってしまい、 これ以上進めることができませんでした。 同じような大量のデータに対して重複確認することは不可能なのでしょうか? もし、linuxのファイル制限がなくてもHDDの容量制限に引っかかってしまいそうです。 このような制限に依存せず、重複確認できる方法がありましたら教えてください。 質問が不明、不足な点がある場合にもご指摘おねがいします。宜しくお願いします。

  • C++ テキストファイルをクリップボードにコピー

    ブログの更新を楽にするためにいくつか言葉を入力したら内容を生成するプログラムを作ったのですが、 出力したテキストファイルを毎回開いて全てコピーしているので、ほんの少しだけですが手間が掛かります。 どうせなら、実行したときに生成したテキストファイルをクリップボードにコピーできたら、わざわざ生成したテキストファイルを開いてコピーする必要がないと考え、調べたのですが分かりませんでした。 どなたか教えてくれたら幸いです。よろしくお願いします。

  • プログラム環境について

    PCのHDDを新品に交換したので 新しく環境を整えたのですが jdk1.7.0_09をインストールしたあと eclipseの環境でプログラムを書いてます。 以前は会社と、自宅で、同じプログラムを開発して うまく併用出来てましたが 今回の環境では何点か問題が発生します。 1 以前は対応できてたプログラムなのに   (現在会社では対応できてる)   型の不一致 intからIntegerに変換出来ませんとなります。   単純に変更すれば良いのですが   違うPCでは通用するのになぜでしょうか??   2 ユニコードテキストデータを読み込んでユニコードテキストデータに   出力しているのですが   新しく環境を整える前のPCでは   同じプログラムで   ユニコードテキストデータが対応できていたのに   出力したテクストデータがシフトJIS?に戻ってしまいます。   ちなみにそのプログラムは今でも会社では   出力後ユニコードテキストデータになります。  JAVAの環境を整える際、JDKのVerとかで問題が出てくるのでしょうか??  そのた心当たりあるかたアドバイスお待ちしております。 jdk1.7.0_09 eclipse-java-galileo-SR2-win32

    • ベストアンサー
    • Java
  • Xcodeで作ったプログラムの出力ファイル(txt形式)が開けない。

    僕は今、学校宿題であるのC言語によるプログラムを、Xcode2.0のstanderd Toolでプログラムを作ったのですが、なぜかそのプログラムで出力される出力ファイル(txt形式)を開こうとすると 「テキストエンコーディングがMacOSXに対応していない」 と言う内容のエラーがでて、標準のテキストエディタで開くことができません。 どうすれば開けるようになるでしょうか? 先生に聞いても「Macさわったことないから分からない」と言われてしまい困っています 僕のMacはiMac Intel Core Duo MA199J/A (1830) OSバージョンは10.4.6です。 プログラムはFileポインタを用いて標準入力したデータをテキストファイルに書き出すと言う内容です。

    • ベストアンサー
    • Mac
  • COBOL97でのプログラム作成に関する質問です。

    COBOL97でのプログラム作成に関する質問です。 画面からデータを入力して、ファイル(レコード)出力をします。画面上(FORM使用)の項目 に、メモリ内の内容(WORD等の他アプリからマウスにてコピーしたデータ)を貼り付ける方法 はありませんでしょうか。

専門家に質問してみよう