文章目录
一、逐行遍历文件文本数据
1、获取文件中的文本行
2、查询文本行数据
3、追加文件数据
4、使用占位符方式拼接字符串
二、完整代码示例
一、逐行遍历文件文本数据
1、获取文件中的文本行
调用 fgets 方法 , 从文件中 , 获取一行数据 , 写出到指定的 数组 或 内存空间 中 ;
// 获取 fp 文件的一行数据 , 保存到 line_buffer 数组中 , 最多获取 MAX_LINE 字节 p = fgets(line_buffer, MAX_LINE, fp); // 如果获取失败 , 则返回 NULL // 获取成功 , 返回的是 line_buffer 地址 if (p == NULL) { break; }
2、查询文本行数据
查询 本行字符数组中是否包含 键 Key ;
如果本行不包含 Key , 将数据行 line_buffer , 追加拷贝到 file_buffer 数组中 ;
如果 Key 关键字 在本行 , 则使用新的数据替换原来的数据 , 最后拷贝到 file_buffer 中 ;
调用 strstr 函数 , 可以查询 字符串 中是否包含某个 子串 , 并返回 子串首地址 ;
// 查询 本行字符数组中是否包含 键 Key p = strstr(line_buffer, key);
代码示例 :
// 查询 本行字符数组中是否包含 键 Key p = strstr(line_buffer, key); // 本行不包含 Key , 将数据行 line_buffer // 追加拷贝到 file_buffer 数组中 if (p == NULL) { strcat(file_buffer, line_buffer); continue; } else { // 如果 Key 关键字 在本行 , 则使用新的数据替换原来的数据 , 最后拷贝到 file_buffer 中 // 替换本行数据 sprintf(line_buffer, "%s = %s\n", key, value); // 将替换的数据 , 追加拷贝到 file_buffer 数组中 strcat(file_buffer, line_buffer); // 设置 Key 存在标志位 key_exist = 1; }
3、追加文件数据
调用 strcat 函数 , 将 line_buffer 数据 , 追加到 file_buffer 中 ;
// 本行不包含 Key , 将数据行 line_buffer // 追加拷贝到 file_buffer 数组中 if (p == NULL) { strcat(file_buffer, line_buffer); continue; }
4、使用占位符方式拼接字符串
调用 sprintf 可以使用占位符方式拼接字符串 , 这里将键值对按照 "%s = %s\n" 形式 , 拼接成字符串 , 然后将拼接后的字符串追加到另外一个数组中 ;
// 替换本行数据 sprintf(line_buffer, "%s = %s\n", key, value); // 将替换的数据 , 追加拷贝到 file_buffer 数组中 strcat(file_buffer, line_buffer);
二、完整代码示例
完整代码示例 :
// 逐行遍历配置文件 while (!feof(fp)) { // 将 line_buffer 数据清空 memset(line_buffer, 0, sizeof(line_buffer)); // 获取 fp 文件的一行数据 , 保存到 line_buffer 数组中 , 最多获取 MAX_LINE 字节 p = fgets(line_buffer, MAX_LINE, fp); // 如果获取失败 , 则返回 NULL // 获取成功 , 返回的是 line_buffer 地址 if (p == NULL) { break; } // 查询 本行字符数组中是否包含 键 Key p = strstr(line_buffer, key); // 本行不包含 Key , 将数据行 line_buffer // 追加拷贝到 file_buffer 数组中 if (p == NULL) { strcat(file_buffer, line_buffer); continue; } else { // 如果 Key 关键字 在本行 , 则使用新的数据替换原来的数据 , 最后拷贝到 file_buffer 中 // 替换本行数据 sprintf(line_buffer, "%s = %s\n", key, value); // 将替换的数据 , 追加拷贝到 file_buffer 数组中 strcat(file_buffer, line_buffer); // 设置 Key 存在标志位 key_exist = 1; } }