私は以下のことをするプログラムを作成しています
[1]①読み込んだファイルから文字列を分割
②分割した文字列を構造体内の配列に入れる
③構造体内の配列を並び替えて出力する
④出力した配列からname2ごとにテキストファイルを作成し、ファイルに書き込む
⑤ファイルを閉じて、作業を読み込んだファイルが終わるまで作業を続ける
現在、④以外のコーディングはできたのですが、それ以外ができていません
[2]現在作成中のプログラムコードは以下のようになります
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define PET1 "DOG "
#define PET2 "CAT "
#define PET3 "RAT "
/* 配列のデータの構造体 */
typedef struct petnum{
char name1[100]; // My
char name2[100]; //ペットの種類
char name3[100]; //ペットの名前
char name4[100]; //性別
char name5[100]; //age
char name6[100]; //年齢
char name7[100]; //birthday
struct petnum *next;
}petnum;
int main(void)
{
char fileName[100];
/* 入力データ */
static char look[200];
/* 検索・絞り込み用配列 */
char search1[] = PET1;
char search2[] = PET2;
char search3[] = PET3;
/* 区切り文字 */
static char cut[] = {" :"};
char *tok; //文字列分割用
FILE *fp; //ファイル読み込み用
petnum head; //先頭データ格納用構造体
int count; //格納したデータの個数をカウント
/* 読み込むログファイルを入力させる */
printf("ファイル名を入力してください。\n");
scanf("%s", fileName);
fp = fopen(fileName, "rb+"); //読み込んだファイルを読み書きできるようにする
/* 入力したファイルが存在しなければ処理を終了 */
if(fp == NULL)
{
printf("ファイルをオープンできませんでした。\n");
return 1;
}
/* 入力したファイルが存在すれば処理を続行 */
else
{
printf("ファイルをオープンしました。\n");
}
/* 各入力データ処理 */
while(fgets(look, 200, fp)!= NULL)
{
count = 0; //格納データのカウントをリセットする
/* 構造体の各要素 */
char *target[] = {
head.name1, head.name2, head.name3, head.name4, head.name5, head.name6, head.name7
};
/* 文字列の抜き出し */
if(strstr(look, search1) || strstr(look, search2) || strstr(look, search3))
{
tok = strtok(look, cut); //文字列を分割
/* 文字列が取り出せなくなるまで処理を行う */
while(tok != NULL)
{
/* 取り出した文字列が区切り文字ではなく、格納先の要素が残っているならば格納を行う */
if(strcmp(tok, cut) >= && (size_t)count < sizeof(target) / sizeof(*target))
{
/* 格納してカウントする */
strcpy(target[count], tok);
count++;
}
tok = strtok(NULL, cut); //次の文字列を取得
/* 抜き出した文字列を出力する */
if (6 <= count && count <= 7)
{
if(count == 6)
{
printf("[%s %s %s %s]\n", target[2], target[1], target[3], target[5]);
}
else if(count == 7)
{
printf("[%s %s %s %s %s]\n", target[2], target[1], target[3], target[6], target[5]);
}
}
/* ここまで文字列の抜き出し */
}
fclose(fp);//ファイルをクローズする
printf("ファイルをクローズしました\n");
return 0;
}
[3]現在発生しているエラーはこのようになっています
prog.cc: In function 'int main()':
prog.cc:80:30: error: expected identifier before '(' token
if(strcmp(tok, cut) >= && (size_t)count < sizeof(target) / sizeof(*target))
^
prog.cc:80:30: error: expected ')' before '(' token
prog.cc:106:1: error: expected '}' at end of input
}
^
prog.cc:106:1: error: expected '}' at end of input
内容は
My pet Deta : Hasegawa
My DOG : John Male age 4 4/23
My CAT : Mary Female age 3
My RAT : Ann Female age 1 8/14
My RAT : Jack Male age 1 8/14
例としてDOGのプログラムを作成するのならば、ファイルの名前はpet_DOG.txtというファイルを作成し、中身は というものを作成したいです。
要望が多くて申し訳ありませんが、アドバイスや参考にする文献を紹介していただけると幸いです
作成環境はC++で、私自身、c言語は最近学習を始めたばかりでライブラリ関数や構造体、ポインタ、配列、ファイル作成はまだ学習中です