ファイル入出力のタイミング

このQ&Aのポイント
  • C言語でのファイル入出力のタイミングについて調査しています。効率的な取り扱い方法はどちらが良いでしょうか?
  • 簡単な電話帳を作成中ですが、名前と電話番号をファイルに保存する際の効率的な方法について教えてください。
  • C言語での電話帳作成において、ファイル入出力のタイミングについて検討しています。最適な方法はどれでしょうか?
回答を見る
  • ベストアンサー

ファイル入出力のタイミング

現在C言語を勉強しているものです。 簡単な電話帳を作成しているのですが、以下のデータを取り扱う場合に効率の良いのはどちらの方法でしょうか? ・機能としては、新規登録やデータの更新、削除が可能。 ・データは名前と電話番号をTABで区切ってファイルへ保存。 ・名前と電話番号はそれぞれ32バイトずつ。 ・機能はソートと、名前の前方一致、電話番号の部分一致での検索。 最大保存件数を1000件としているので、データ量から見て、処理の頭でファイルの内容をメモリへ全て読みこみ、処理終了時にファイルへ出力するのが良いのかなと思っておりますが、どうなのでしょうか? 以上、よろしくお願いいたします。

  • ya-cha
  • お礼率68% (184/268)

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

  • ベストアンサー
  • eroermine
  • ベストアンサー率18% (83/444)
回答No.1

>処理の頭でファイルの内容をメモリへ全て読みこみ、処理終了時にファイルへ出力する 最初はこれで良いでしょう。 もう片方の案は見当たりませんが seek してファイルを直接書き換えるのでしょうか。 メモリ以上のデータ-に対応できる利点はあってもソートは難しいですね。

ya-cha
質問者

お礼

ありがとうございました。 もう一つは、新規登録や更新時にファイルへ出力を行い、再度更新等の処理を行う際に、ファイル入力をし直すというのを考えていたんですが、どう考えても非効率ですもんね・・・。

関連するQ&A

  • 2つのCSVファイルをマッチング

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

  • perlを使ったファイルの入出力について

    perl 初心者です。 perl を使ってデータ整理を試みていますが、方法がわからなくて困っています。 やりたい操作は、 1、ディレクトリ内にある特定の拡張子をもつすべてのデータファイルを読み込む 2、データソート 3、データファイル名を変更せずに、ソートしたデータを出力する 例 ディレクトリに以下のデータファイルがあるとします aaa.data bbb.data ccc.data : zzz.data これらのデータファイルをすべて読み込み、中身を整理した後に aaa.txt bbb.txt ccc.txt : zzz.txt となるように、それぞれのデータの名前を変更せずに出力したいと思っています。 スクリプトのサンプルなんかがあればありがたいです。

    • ベストアンサー
    • Perl
  • ファイルの入出力

    今までに大統領になった人の就任日、代、名前などデータがCSVファイルとしてあります。そのファイルをfgets関数で1行ずつ読み込み、大統領になった回数が多い順に並び替えて新しいcsvファイルに出力したいと考えています。 構造体にそのデータを入れていきたいと思うのですが、その構造体にデータを入れるにはどのようにしたら良いのでしょうか??またどのような構造体を作れば良いのでしょうか??win98でc言語を使用しています。

  • ExcelでのCSVファイルの編集について、

    ExcelでのCSVファイルの編集について、 オートフィルタ機能を使いたいため、 ExcelでCSVファイルの編集しようとしているのですが、ちょっと苦戦しています。。。 私が試してみたこと 1.もとのCSVファイルの拡張子を○○.csv → ○○.txtに変更。   ↓ 2.Excelの「開く」からその○○.txtを読み込む。   ↓ 3.テキストファイルウィザードに従い、   1「カンマやタブなどの区切り文字によって~ 」にチェック   2「区切り文字」→ カンマ、「文字列の引用符」 → "   3「列のデータ形式」 → 文字列 ※090などの数字を、90と先頭の0を消されないように 上記のような手順でCSVファイルを取り込み、編集を終え、 保存する時は   「○○.txtにはテキスト(タブ区切り)と互換性のない機能が含まれている可能性があります。    この形式でブックを保存しますか?」 → このまま保存するため「はい」を選択 これでバッチリOK!…かと思われたのですが、 元の編集前の○○.txt は"名前","ヨミ","電話番号1", …… ""とカンマ区切りであったのが、 編集後の○○.txtは名前 ヨミ 電話番号1  …… タブ区切り(?) となってしまっています。 (CSVファイルとしてはタブ区切りでも問題ないのでしょうが…) どうすれば元のカンマ区切りの形式のまま保存できますでしょうか。 アドバイスよろしくお願い致します。

  • C++でのファイル入出力について

    C++で計算したデータを何かファイルに保存しようとしています。 #include<iostream> #include<fstream> using namespace std; int main() { ofstream fout("test0.txt");     //ここで処理をしてファイルに書き込む作業を行う fout.close(); return 0; } 以上のようなサンプルがあったすると、ファイルはカレントディレクトリ に保存されますよね。 そのファイルの保存先を指定するようにするにはどうしたらいいですか? よろしくお願いします。

  • VBScriptでのファイル読込について

    CSVファイル内のデータをキー項目(コード)ごとに分け、 それぞれ別のCSVファイルに出力しようとしています。 使用する言語はVBSです。 CSVファイルは以下のような形式です。 連番,コード,フラグ,日付 1,0001,A,20091001 2,0002,A,20091001 3,0002,U,20091002 4,0001,D,20091003 CSVファイルは既定の文字コード(UnicodeBE BOMなし)の形式であり、 通常のファイルを読み込むような処理では正しく 読み込むことが出来ませんでした。 (OpenTextFileメソッドの第4引数にUnicodeBEは指定できないのでは…?) また、CSVファイル内のデータは"コード"でソートされておらず、 VBSではソート機能を標準で持っていないため そちらについても実装する必要があります。 ファイルを取り込む際の文字コードの指定や ソート処理について詳しい方、ご回答よろしくお願いします。

  • C++のstringクラスとファイルの入出力について

    C言語では入出力はfopen,fcloseなど, 文字列の扱いも,char型の配列にfgets…なんとなく使いづらかったので, C++のstringクラスが便利だと聞き,勉強しています。 主にネットで"string 配列 入出力"などで検索しながら探しています。 自分で作成したデータファイル"ex.txt"を読み込み, 用意した配列"data[i]"に代入して,その後色々処理をしたいと思います。 //ex.txt A 2 0 1.0 B 1 2 10.0 C 1 0 100.0 という,"名前 番号1 番号2 数値データ"という4つの情報を"data[i]"に入れ,for文でA~Cまで配列を作りたいです。 後に,名前と番号,数値を切り離して処理したいです。 とりあえず某サイトを見よう見まねで以下のプログラムを書きました。 #include <fstream> #include <string> #include <iostream> using namespace std; int main(){ ifstream ifs( "ex.txt" ); string str; ifs >> str; cout << str << endl; return 0; } Visual C++のコンソールアプリケーションでデバッグなしで実行させると 単に,"A"と一文字しか出力されませんでした。 正直,動作もなにもわからず書いただけです。 C++のstringクラスを用いて,先の"ex.txt"の内容を, ファイルから読み込んで,画面に表示させるプログラムを教えてください。 よろしくお願いします。

  • D506iのvcf,vmgファイル

    ドコモのD506iでメモリースティックに保存した電話帳とメールのファイルがあります。これをパソコン上でインポートしたいのですが,できるソフトウェアあるでしょうか?  ・電話機本体のデータは既に読み出せません  ・アウトルック等では,細かなフォーマットの違いか読めません  ・テキストなどで中は見れますが,件数があり効率的ではありません

  • C言語のファイル入出力について教えて下さい

    C言語初めて1ヶ月の超初心者です。 本を読んでもネットで調べても、ファイル入出力の意味がいまいちよく分かりません。 プログラムはCPadで書いています。 書き終わったプログラムを.cのファイル名で保存し、それをコンパイル。 読み込みたいファイルを.csvで作る。書いたプログラムの実行ボタンを押し、 .exe .csv .c の3つのファイルを打ち込んだ後、また.cを打ち込む。 これで一応実行はできるのですが、csvファイルで作ったもの (例をだして言うと ------------------------------------------------------------------ 名前     番号      給与   残業代    所得税 ○○  0001     200000   20000     10000 ------------------------------------------------------------------ というものをcsvで作るとします)  は、プログラムでも、名前 番号 給与 残業代 所得税 と書いてある部分はまったく同じように作らないと csvファイルから読むことはできないのでしょうか? csvファイルとプログラムを実行した結果の役割が、理解出来なくて困っています。ずっとプログラムの文法(?)ばかり勉強してきて、いざファイル入出力をしたら、どういう意味があるのかどう役立つのか分かりません。 後、上のような表で20人分をまとめて出力したいのですが、ファイル入出力するにあたって、条件式はfprintfなどを書く前に書くのでしょうか? お勧めの分かりやすい本などの情報も、教えて頂けると嬉しいです。   長々申し訳ありませんが、宿題の納期が近いので困っています。 よろしくお願いします。

  • ファイルをセーブする時のfopenのモードについて

    アンケートのようなシステムを作っています。 ユーザーからの投票データをログに保存するときに、 1.1行ずつ読み込む 2.データの番号とポストされた番号が一致していればデータを+1 3.変数$buffに処理が終わった行をためておく 4.1に戻る 5.全ての行が終わったらまとめて保存($buffを保存) という流れにしており、1~4はファイルロックして、読み込みおよび書き込みさせています。 例えば 3,あなたの好きな食べ物は?,0,0,0 2,あなたの好きな色は?,0,0,0 1,あなたの好きな車は?,0,0,0 というログデータがあるとして、投票フォームから渡ってきた値をforeach($_POST as $key =>$value)として $keyとログの先頭の番号が一致していれば$valueにあたるデータを+1しています。 ファイルを保存するときは $fp=@fopen($log, "w+") としていますが、これだとログデータが全部消えて0バイトになってしまいます。 $fp=@fopen($log, "r+") だと、ログデータの後に修正されたデータが追加されて保存されてしまいます。(倍のデータになってしまいます) 直前にセーブする$buffのデータを出力させると正常ですので、fopenのモードが問題だと考えています。 このような場合、どのように処理すればいいのでしょうか。 一度ファイルを消してから保存する方法も考えたのですが、ファイルをロックしながらデータを消す方法がわかりませんでした。 よろしくご教授お願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう