C言語について教えてください。
数日前に「http://okwave.jp/qa4903738.html」で質問させてもらった者です。
前回、寝起きでボケてるうちに回答を締め切ってしまって、
回答してくださった方との対話ができていませんでした。
すみません。
今回は前回の指摘された部分を含めて回答を戴きたく投稿させてもらいます。
質問内容はほぼ変わりありません。
CSVファイルの内容をfreadで読み込み、strtokを使わずにbuffに格納した後、
buffから1文字ずつbuff2へコピーさせていって、コンマがきたら数字、
改行がきたら名前と判別して、自作関数に渡して表示させたいです。
あと、fgetsは使わないようにしたいです。
CSVファイルの内容は
『11,名前1(改行)
15,名前2(改行)
18,名前3』
といった感じです。
-----------------------------------------------
#define _CRT_SECURE_NO_DEPRECATE 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NUM 256
struct kou
{
short nenrei;
char namae[30];
};
void pri(struct kou o)
{
printf("%d\n%s\n",o.nenrei,o.namae);
}
int main(void)
{
FILE *fp; // ファイルポインタ
char buff1[NUM] = {0};
char buff2[NUM] = {0};
char *fname = "text1.csv"; // ファイル名を指定
int n = 0;
struct kou p;
fp = fopen(fname, "r");
if(fp == NULL)
{
printf("%sファイルをオープンできませんでした。\n",fname);
return 1;
}
fread(buff1, 1, NUM, fp); // ここでファイルの内容が全てbuffに入る。
// printf("%s\n",buff1); // buff1にファイルの内容が書き込まれているか確認する。
while((buff2[n] = buff1[n]) != NULL) // buff2[0]からbuff1の中が終わるまで一文字ずつコピーしていく。
{
if(buff2[n] == ',') // buff2に格納されていく中にコンマがきたら以下の作業を行う。
{
p.nenrei = atoi(buff2); // char型からshort型への変換し、p.iAgeに入れていく。
}
if(buff2[n] == '\n')
{
strcpy(p.namae,buff2); // p.namaeにbuff2をコピー。
pri(&p);
}
n++;
}
fclose(fp);
printf("ファイルをクローズしました。\n");
return 0;
}
-----------------------------------------------
前回指摘されたwhileの条件式ですが、
まだchar型とポインタを比べてることになっているので正しくないんですよね?
正直、どうすればいいかわかりません。
あと、今のままでは名前3の後が改行ではないので表示されることないですよね・・・。
どうすれば表示されるようになるでしょうか。
これも前回言われましたが while内の1つ目のif文の所で、カンマを処理したので次に取り込むbuff2への書き込み位置の変更というのもわかりません。
カンマが来た時点でbuff2[n]のnは2になっているんですよね?
ということはbuff2[3]からまた読み込めたらいいということですよね?
厚かましくも立て続けに質問してしまって申し訳ありませんが回答を戴けたらありがたく思います。
宜しくお願いします。
お礼
すぐにできました。ありがとうございました。