文章目录
一、函数接口形参
- 一、函数接口形参
- 二、读取配置文件的逐行遍历操作
- 1、读取配置文件的逐行遍历操作
- 2、读取一行数据
- 3、查找字符
- 4、删除字符串前后的空格
- 5、完整代码示例
函数作用 : 从 char *filename
文件中 , 查找 char *key
关键字 对应的 值 ; 将查找到的值 写出到 char *value
指针指向的内存中 , 将值的长度写出到 int *value_len
指向的内存中 ;
代码示例 :
/**
* @brief read_config_file 读取配置文件
* @param filename 文件名
* @param key 键
* @param value 值
* @param value_len 值字符串长度
* @return
*/
int read_config_file(char *filename /*in*/, char *key /*in*/, char *value/*in out*/, int *value_len /*out*/)
二、读取配置文件的逐行遍历操作
1、读取配置文件的逐行遍历操作
读取配置文件的逐行遍历操作 :
- 读取一行文本数据
- 先判断该行数据中, 是否包含 ‘=’ 字符
- 然后查找该行数据中 , 是否存在 Key 关键字字符串
- 如果存在 Key 关键字 , 则继续查找 Key 关键字右侧是否有 ‘=’ 字符
- 如果找到了 ‘=’ 字符 , 则越过该字符 , 剩下的就是 Value 字符串信息 ;
- 删除 Value 字符串左右两侧的空格信息
- 使用两个指针分别指向 Value 字符串两侧 ;
// 获取一行数据
fgets(line_buffer, MAX_LINE, fp);
3、查找字符
// 查找 '=' 字符
p = strchr(line_buffer, '=');
// 如果没有找到 '=' 字符 , 则退出 , 继续执行下一次循环
if (p == NULL)
{
continue;
}
4、删除字符串前后的空格
// 获取 Value 起始位置
for(;;)
{
// 去掉开始位置的空格
if (*p == ' ')
{
p ++ ;
}
else
{
start = p;
if (*start == '\n')
{
// 进入到该分支 , 说明 Value 值是空的
// 直接退出即可
goto End;
}
break;
}
}
// 获取 Value 结束位置
// 从 Value 的不为空格的位置开始遍历
for(;;)
{
// 遇到空格或回车 , 说明读取到了最后的位置, 或者换行位置
if ((*p == ' ' || *p == '\n'))
{
break;
}
else
{
p ++;
}
}
end = p;
5、完整代码示例
// 逐行遍历 配置文件 中的文本数据
while (!feof(fp))
{
// 清空 line_buffer 中的遗留数据 , 避免被上一次写入的数据干扰
memset(line_buffer, 0, sizeof(line_buffer));
// 获取一行数据
fgets(line_buffer, MAX_LINE, fp);
// 查找 '=' 字符
p = strchr(line_buffer, '=');
// 如果没有找到 '=' 字符 , 则退出 , 继续执行下一次循环
if (p == NULL)
{
continue;
}
// 查找 Key 值
// 如果找到了 Key 关键字 , 则返回的指针 p 指向 Key 关键字出现的首地址中
p = strstr(line_buffer, key);
// 如果没有找到 Key 关键字 , 退出执行下一次循环换
if (p == NULL)
{
continue;
}
// 越过 Key 关键字 , 从 Key 关键字后面的内容遍历
p = p + strlen(key);
// 查找 '=' 字符
p = strchr(p, '=');
// 如果没有找到 '=' 字符 , 则退出 , 继续执行下一次循环
if (p == NULL)
{
continue;
}
// 越过 '=' 字符 , 从 '=' 字符 后面的内容遍历
p = p + 1;
// 获取 Value 起始位置
for(;;)
{
// 去掉开始位置的空格
if (*p == ' ')
{
p ++ ;
}
else
{
start = p;
if (*start == '\n')
{
// 进入到该分支 , 说明 Value 值是空的
// 直接退出即可
goto End;
}
break;
}
}
// 获取 Value 结束位置
// 从 Value 的不为空格的位置开始遍历
for(;;)
{
// 遇到空格或回车 , 说明读取到了最后的位置, 或者换行位置
if ((*p == ' ' || *p == '\n'))
{
break;
}
else
{
p ++;
}
}
end = p;
// 通过 间接赋值 设置 Value 值长度
*value_len = end - start;
// 通过 间接赋值 设置 Value 值数据内容
memcpy(value, start, end - start);
}