ファイル読み込みの関しての質問

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
HorisonA

ファイル読み込みの関しての質問

#1

投稿記事 by HorisonA » 8年前

ファイル入出力の処理に関して2つ質問があります。(おそらく初歩的なものだと思いますがよろしくお願いします。)
現在テキストファイルから入力した項目を検索して、検索した項目が示す値の合計の平均を調べるプログラムを作っています。
どういうものかというと
テキストファイルの中身が下図のような場合、プログラムに「男」、「身長」と入力し、
「男」の身長の平均である(178+190)/2[cm]を出力します。
---------ここから-------------
Aクラスの健康診断結果
Aクラスの体重
番号 姓 性別 体重
1  加藤 男 68
2  鈴木 女 54
3  佐藤 男 70
4  佐藤 女 49

Aクラスの身長
番号 姓 性別 身長
1  加藤 男 178
2  鈴木 女 168
3  佐藤 男 190
4  佐藤 女 150
---------ここまで-------------
ここで1つ目の質問です。このテキストファイルを読み込むときに使うfopen("~.txt","r")は
「あくまでもファイルを読み込みモードで開いただけであって、まだファイルのデータに対して何もしていない」
という扱いでいいのか?

2つ目の質問は
『』のプログラムを実現しようとしたときに、対象となるファイルの中身を一度すべて読み込む必要があるかどうか?

以上です。よろしくお願いします。

アバター
BEAT
記事: 4
登録日時: 9年前
住所: 兵庫県S市杜王町
連絡を取る:

Re: ファイル読み込みの関しての質問

#2

投稿記事 by BEAT » 8年前

一つ目の質問に対して
fopen("~.txt","r")は「ファイルを読み込む」関数なので「テキストファイルに対して何もしていない」という意味では
HorisonAさんの認識でいいと思います。

二つ目の質問に対してはちょっと自信がないので他の方にお任せします。
お力になれずすいません(_ _)

jay
記事: 314
登録日時: 9年前
住所: 大阪市
連絡を取る:

Re: ファイル読み込みの関しての質問

#3

投稿記事 by jay » 8年前

1つ目の質問の回答としては
fopen()関数は(今回の場合)「読み込み用としてファイルを開いた」という認識で間違いはないと思います。
特に開いたファイルに変化がある訳でもないので、HorisonAさんの認識で間違いはないかと


2つ目の質問「対象となるファイルの中身を一度すべて読み込む必要があるかどうか?」
に関してですがFileRead_getc()関数にしろgetc()関数にしろ
上から順番に読み込んでいくので今回の場合一番下まで、つまり最初から最後まで読み込む必要があると思います。

読み込んだ情報のなかから必要なモノだけを選んで然るべき形で保存し、残りは捨てる。
それを最後までやった後は、その中から必要なものだけを取り出して計算。
流れとしてはこんな感じでいいと思いますが・・・。
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

アバター
kimuchi
記事: 163
登録日時: 9年前
住所: 東京

Re: ファイル読み込みの関しての質問

#4

投稿記事 by kimuchi » 8年前

ファイル内でデータの位置が分かっていればfseek関数でその場所だけをピンポイントで読み込むことも出来ないことは無いと思いますが、
ファイルがテキスト形式であること、文字列が定型でないことを考えると、
既に仰られているようにファイルを全て読み込んでしまってから処理する方が無難であると思います。

maru
記事: 150
登録日時: 9年前

Re: ファイル読み込みの関しての質問

#5

投稿記事 by maru » 8年前

HorisonA さんが書きました:2つ目の質問は
『』のプログラムを実現しようとしたときに、対象となるファイルの中身を一度すべて読み込む必要があるかどうか?
ファイルの中身をすべて読み込む必要があるか?という問いに対しては、
最後まで読まないと対象のデータ全てを検索できないから当然「すべて読み込む必要がある」
という回答になります。

問題は「すべて」の前にある「一度」ということですが、真の問いは検索前に全部読み込んで
メモリに保存しておくのか?、読み込みながら検索するのか?ということではないかと思います。
回答は、プログラムで検索するのが一回だけなら、読み込みながら検索するのがよく、一回の
実行で複数回の検索を実行するなら全部読み込んでおく方がよい、ということになります。

もっとも、読み込むデータが大量の場合、メモリに読み込めないことがあるかも知れないことを
考慮に入れておくことも必要でしょう。

HorisonA

Re: ファイル読み込みの関しての質問

#6

投稿記事 by HorisonA » 8年前

BEAT様、jay様、kimuchi様、maru様、回答有り難うございました。

質問1は「あくまでも…」の考えでよいのかと納得しました。

質問2の方は
「ファイルの中身をすべて読み込まず、
入力項目をピンポイントで検索するのはできない」と理解しました。
この辺は曖昧だったので、白黒ついたのでよかったです。

後、maru様の言う通りで、
検索前に全部読み込んでメモリに保存しておくのか?
or 読み込みながら検索するのか?
とすれば、皆様方に質問の意図が伝わりやすかったのではないかと思います。
失礼しました。

今回作っているものは、検索を1回しか行わないので、
「読みながら検索」する方針でプログラムを作りたいと思います。

回答してくれた皆様方、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る