C言語についてアドバイスをください。
CSVファイルの内容をfreadで読み込み、strtokを使わずにbuffに格納した後、
buffから1文字ずつbuff2へコピーさせていって、コンマがきたら数字、
改行がきたら名前と判別して、自作関数に渡して表示させたいです。
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"; // ファイル名を指定
short i = 0;
int n = 0;
struct kou p;
fp = fopen(fname, "r");
if(fp == NULL)
{
printf("%sファイルをオープンできませんでした。\n",fname);
}
fread(buff, 1, NUM, fp);
while(buff1[n] != NULL)
{
buff2[n] = buff1[n]; // buff2[0]からbuff1の中を一文字ずつコピーしていく。
if(buff2[n] == ',') // buff2に格納されていく中にコンマがきたら以下の作業を行う。
{
i = (short)atoi(buff2); // char型からshort型への変換
p.nenrei = i;
}
if(buff2[n] == '\n')
{
strcpy(p.namae,buff2); // p.namaeにbuff2をコピー。
pri(&p);
}
n++;
}
fclose(fp);
printf("ファイルをクローズしました。\n");
return 0;
}
-------------------------------------------------------
今のままだと
『11
11,名前1
11
11,名前1
15,名前2』
という表示になってしまいます。
while 内で既に読み込んだ部分を読み込ませないよう(表示させないよう)にできたら良いと思うんですが、そういったやり方はあるのでしょうか?
むしろやり方を変えたほうが良いでしょうか・・・。
まだC言語を学び始めて日が浅いので、色々間違っている部分もあると思いますが、
そういったことを含めてアドバイスをいただけたらと思います。
よろしくお願いします。
お礼
回答ありがとうございます!!後方にシフトする考えは全く思いつきませんでした。。ぜひ試してみます。ところで、memcpyには"0x"はいらないのでしょうか?知識不足で申し訳ございませんが、教えてください。