今回の課題はC言語でやるにはかなり難しいですね
C言語ではファイルの一部だけを変更する機能がないので
一度、全部読み出してから、データを変更して、もう一度全部書き出す
そんな方法になります
1.データを読み出す
まずは先頭から1行づつ読み出していって
区切り文字である===
が見つかるまでデータを読み処理を書きましょう
c
1int main(int argc, char** argv)
2{
3 const char file_name[] = "./data/tel.txt";
4
5 FILE* r_fp = fopen(file_name, "r");
6 if(r_fp == NULL)
7 {
8 printf("file open error -> %s", file_name);
9 }
10
11 char text_line[256];
12
13 while(fgets(text_line, sizeof(text_line), r_fp) != NULL)
14 {
15 // 区切りコードを認識してデータを区切る
16 if(strstr(text_line, "===")!=NULL)
17 {}
18 }
19
20 fclose(r_fp);
21}
- 一行づつ読んだデータからなんのデータかを判断する
今回は行先頭の数文字がデータヘッダになっているますね
NAME:
, ID:
とか
なので一行の先頭文字からヘッダを認識してなんのデータかを判断しましょう
C
1 if(strncmp(text_line, "NAME: ", 6)==0)
2 {
3 data.have_name = true;
4 strncpy(data.name, text_line+6, strlen(text_line)-7);
5 }
- 読み込んできたデータを構造体に保存しましょう
区切り文字の間で必要なデータであるNAME
,ID
,TEL
,DEP
が全て含まれているか保証できないので、以下のような構造体を作って、すべてのデータがあるか確認しましょう
C
1struct UserData
2{
3 bool have_name;
4 char name[256];
5 bool have_id;
6 char id[10];
7 bool have_tel;
8 char tel[11];
9 bool have_dep;
10 char dep[10];
11};
12
- データを変更して保存
あとは簡単で上のデータに必要な変更を加えて保存してください
頑張ってください