ページ 1 / 1
ファイルの読み込み
Posted: 2009年5月18日(月) 17:12
by ほのか
お世話になっております。
添付ファイルを参照していただきたいのですが、ファイルへの書き込みはできるようになりましたが、読み込みがうまくいきません;
どうしたらきちんと読み込みできますでしょうか??
読み込みの方も新しく関数を作った方が良いのでしょうか?
Re:ファイルの読み込み
Posted: 2009年5月18日(月) 17:54
by box
読込みがどのようにうまくいかないかを、具体的に書いていただけますか?
プログラムを実行したときに、何かエラーメッセージが出るのですか?
Re:ファイルの読み込み
Posted: 2009年5月18日(月) 20:53
by non
ファイルの読み込みをしている部分はどこですか?
ざっとみたけど、見つからないのですが。
それより、前にも言ったようにmain文をwhile(1)で回して、終了をexitするのは
やめましょうよ。
case 9:で終了フラグを立てるようにして、(例えば end_flg=1)
while(!end_flg)にするとかです。
それに、mainでfopenしたとき、オープンできないときはreturnしているので
elseを書く必要はありません。
Re:ファイルの読み込み
Posted: 2009年5月19日(火) 09:56
by ほのか
回答ありがとうございます。
ファイルの読み込みは、main関数のwhile文の前で行うつもりです。
while(1)などの部分は修正させていただきます。ご指摘ありがとうございます。
Re:ファイルの読み込み
Posted: 2009年5月19日(火) 12:09
by non
>ファイルの読み込みは、main関数のwhile文の前で行うつもりです。
行うつもりで、まだ作っていないなら、動かないのは当然ですね。
>読み込みの方も新しく関数を作った方が良いのでしょうか?
fopenのところから含めて関数にする方がわかりやすいと思います。
Re:ファイルの読み込み
Posted: 2009年5月19日(火) 13:08
by ほのか
作ってみましたが上手くいかなかったため消したものをUPしたのです…
Re:ファイルの読み込み
Posted: 2009年5月19日(火) 14:14
by box
> 作ってみましたが上手くいかなかったため消したものをUPしたのです…
その、うまくいかない部分を見せる方が、
「ここをこうすればうまくいく」という
具体的な回答が届きやすいと思います。
Re:ファイルの読み込み
Posted: 2009年5月19日(火) 14:21
by ほのか
while (fgets(s, 256, fp) != NULL) {
printf("%s", s);
.
.
.
}
上記のような感じにしましたが、実行してみても何も表示されないまたは(NULL)と表示されます。
Re:ファイルの読み込み
Posted: 2009年5月19日(火) 17:06
by non
そこだけみてもわかりません。
面倒でも、すべてを入力したプログラムをアップしてください。
なお、writeの関数ですが、
fprintf(fp,"氏名: %s\n",data.name);
のように、"氏名:"の部分はファイルに出力しない方がいいですね。
実際のデータのみにした方がいいです。
Re:ファイルの読み込み
Posted: 2009年5月20日(水) 09:16
by ほのか
ファイルを新しくUPしました。
読み込んではいるようなのですが、「■■住所登録者■■」のところで表示されない・一度プログラムを終了するとデータが消えているなど、上手くいきません…;
Re:ファイルの読み込み
Posted: 2009年5月20日(水) 13:45
by non
確認ですが、
> while(fgets(filedata,1024,fp)!=NULL){
> printf("%s",filedata);
> }
ここで、読み込んだデータは画面に出力されていますか?
>読み込んではいるようなのですが、「■■住所登録者■■」のところで表示されない・一度プログラムを終了するとデータが消えているなど、上手くいきません…;
この文章を読むと、上のデータは出力されていると思えます。
次に、「■■住所登録者■■」のところで表示されないというのは、filedataに読み込んだデータを
Jusyoroku data[20];に代入していないから、あたりまえでしょう。
一度プログラムを終了するとデータが消えているのは、同じ名前で書き込みのためにオープンしたから
これも当然でしょう。
Re:ファイルの読み込み
Posted: 2009年5月20日(水) 13:59
by ほのか
読み込んだデータは画面に出力されています。
Jusyoroku data[20];に代入するのは登録者表示の関数内でしょうか…?
同じ名前でオープンすると消えてしまうのでしたら、どのようにしたら消えないようにできるのでしょうか;
Re:ファイルの読み込み
Posted: 2009年5月20日(水) 14:30
by non
>Jusyoroku data[20];に代入するのは登録者表示の関数内でしょうか…?
このwhile内ですね。
> while(fgets(filedata,1024,fp)!=NULL){
> printf("%s",filedata);
> }
>同じ名前でオープンすると消えてしまうのでしたら、どのようにしたら消えないようにできるのでしょうか;
データが正しく格納されるようになったら上書きしても大丈夫でしょう。
または、保存する前に名前を再度入力できるようにするとか?(別名保存)
それに、fcloseしてくださいね。
開けたままにしておくのはマナー違反
Re:ファイルの読み込み
Posted: 2009年5月20日(水) 14:52
by ほのか
回答ありがとうございます。
Jusyoroku data[20];に代入するにはどのようにしたら良いのでしょうか…
data = filedata;とかでは駄目だったのでよくわかりません;
Re:ファイルの読み込み
Posted: 2009年5月20日(水) 15:21
by pooka
こんな感じでどうでしょうか?
int count = 0;
while(fgets(filedata,1024,fp) != NULL){
if(strcmp(filedata,"\n") == 0)
continue;
switch(count%5){ //5は氏名、郵便番号、住所、電話番号、性別の5個
case 0:
strcpy(data[cnt].name,filedata);
break;
case 1:
strcpy(data[cnt].yubin,filedata);
break;
//あと同じように
}
if(++count%5 == 0)
++cnt;
}
fgetsで読み込んだfiledataには改行文字も含まれているので、別途処理が必要になるかもしれません。
Re:ファイルの読み込み
Posted: 2009年5月20日(水) 15:53
by ほのか
回答ありがとうございます。
表示されるようになりました^^ありがとうございます。
しかし、改行をどうやったら消せるのかわかりません;
それと、性別のところをどうやったら表示させられるでしょうか?;
今のままだと何も表示されません;
新しくファイルを添付させていただきます。
Re:ファイルの読み込み
Posted: 2009年5月20日(水) 16:02
by pooka
今から出かけるので性別だけ
if(strcmp(filedata,"男性\n") == 0)
strcpy(data.sei,"1");
else
strcpy(data.sei,"2");
書き込むときに「性別:」を書いてない、また改行文字を削除していないと仮定しています。
Re:ファイルの読み込み
Posted: 2009年5月20日(水) 16:17
by ほのか
ありがとうございます!
これからソースを修正してみます^^
改行の部分も自分でまた色々と試してみます!
でもわからない可能性が高いのでまた質問させていただくと思います;