- ベストアンサー
複数ファイルの同時読み込みの方法と脱初心者向け参考書
ループにて、複数のファイル(.txt)を同時に読み込む方法はあるのでしょうか。(厳密に言えば、完全に同時ということではなく、時間差をつけてということ)。以下のプログラムではループ自体が行われていないようでした。while分とfreadの使い方に問題があると思うのですが… ~略~ int a,b; FILE *fp1,*fp2; fp1 = fopen(…,"r"); if(fp1 == NULL) {・・・;} fp2 = fopen(…,"r"); if(fp2 == NULL) {・・・;} while((a = fread(…,1,8,fp1)) != 0) { while(fread(…,1,8,fp2)) { ~略~ } } fclose(fp1); fclose(fp2); 以下略~ また、2つ目のwhileを削除し次のようにすると1つ目のファイル(fp1)は読み込めるのですが、2つ目のファイル(fp2)が読み込めていないようでした。 ~略~ while((a = fread(…,1,8,fp1)) != 0) { b = fread(…,1,8,fp2); 以下略~ 解決方法を教えていただけないでしょうか。 次にいわゆる脱初心者向け(?)ともいえる参考書について。 初心者向けの入門書に載っている関数についての説明などは、どれも最も基本的な機能についてのものがほとんどで、少し応用したものは載ってません。 また、多少上級向けになると、例えば「int sprintf(char *buf,const char *format,…)」や、「int printf(const char *format,…)」といった具合にいかにも専門書らしくなっています。また使用例も、他に見たこともない関数が同時に出てきてまるで手がつけられません。 それはそれで重要なことであるのはわかるのですが、「sprintf(s,"%d%d",a,b) s文字配列、a,b整数値」という理解しやすい書き方をあわせて載せてある、「関数辞典」みたいな参考書とかは市販されているのでしょうか。私の理想通りの物とまでは言いませんが、お薦めのものを推薦していただければ幸いです。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
関数の使い方の問題でなく、考え方の問題かも。 > FILE *fp1,*fp2; ファイルは「本」、ファイルポインタは「しおり」と例えます。 複数(仮に5冊)の本を読むのに、ファイルポインタを2つ宣言しています。 2枚のしおりをどう使えば、5冊の本の全てのページを網羅する事ができるでしょうか? って事を考えると、しおりが2枚なのは誤りで、5枚のしおりを使うか、1枚のしおりを使いまわすかの方が良いと思いませんか? -- または、5冊の本の題名を書いた別の5ページ本が1冊あるのなら、何枚のしおりをどう使えば良いか?って事とか。
その他の回答 (3)
- charmer29-2
- ベストアンサー率25% (41/159)
再びNo.2です。 私は「なにをしたい」のか書いてはどうかとアドバイスしているのですが、 回答者の書いていることをきちんと読んでいますか? 前回の質問でも回答者に対していい加減としか思えないお礼で済ませているし、 今回もまた同じ調子ですね。 >一つのファイルを幾つかの関数で試したことはあるにはあるのですが これは誰に対する言い訳ですか? 私には言い訳なんて必要ありません。 テキストファイルを扱うと言いつつfread()を使う辺り、 まともに動くものが書けているとは思えませんから。 #fread()では不可能と言うことでなく、そういう方針では無理だと言うことです。 プログラミングに王道はありません。 一歩ずつ地道にやるか、誰かに丸投げするか、どちらかを選択するしかないと思いますが如何?
お礼
プログラムの目的は、二つのファイルの中身を文字列として読み込み、特定の文字の数を数えたりしてみようとしたものです。 思うように動作しなかったのは、勘違いでの記述ミスでした。修正後、結果としては目的どおりになりました。 大変お手数をお掛けして申し訳ありませんでした。
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
少なくとも、fread の第一引数が、... では、どこがどう間違っているのか判断のしようがありません。 また、「ループ自体が行われていないようです」や、「2つめのφ卯が読み込めてないようでした」というのは、どのように確認されたのでしょう。 確認方法自体が間違いだったり、勘違いだったという可能性も高いのですが。
お礼
ご回答ありがとうございます。 質問は勘違いから投稿してました。記述ミスでうまくいかなかったみたいです。少なくとも結果的には目的どおりになりました。お手数をお掛けしました。申し訳ありませんでした。
- charmer29-2
- ベストアンサー率25% (41/159)
何度も同じようなレベルの質問を繰り返すより、 いっそ「なにをしたい」か書いてしまったほうが宜しいのでは? そもそも一つのファイルを読み込んで何か処理するプログラムを書いたことはありますか? それさえできないのに複数のファイルをいきなり扱うのはかなり無謀だと思いますが。 #例えば、教習所も出ていないのにレースに出るようなものでしょうかねぇ。
お礼
ご回答ありがとうございます。 >そもそも一つのファイルを・・・ 全てではありませんが、一つのファイルを幾つかの関数で試したことはあるにはあるのですが…
お礼
ご回答ありがとうございました。