前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C 语言】文件操作 ( 配置文件读写 | 读取配置文件 | 函数接口形参 | 读取配置文件的逐行遍历操作 | 读取一行文本 | 查找字符 | 删除字符串前后空格 )

【C 语言】文件操作 ( 配置文件读写 | 读取配置文件 | 函数接口形参 | 读取配置文件的逐行遍历操作 | 读取一行文本 | 查找字符 | 删除字符串前后空格 )

作者头像
韩曙亮
发布2023-03-30 08:51:07
9720
发布2023-03-30 08:51:07
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、函数接口形参


函数作用 :char *filename 文件中 , 查找 char *key 关键字 对应的 值 ; 将查找到的值 写出到 char *value 指针指向的内存中 , 将值的长度写出到 int *value_len 指向的内存中 ;

代码示例 :

代码语言:javascript
复制
/**
 * @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 字符串两侧 ;

2、读取一行数据

代码语言:javascript
复制
        // 获取一行数据
        fgets(line_buffer, MAX_LINE, fp);

3、查找字符

代码语言:javascript
复制
        // 查找 '=' 字符
        p = strchr(line_buffer, '=');
        // 如果没有找到 '=' 字符 , 则退出 , 继续执行下一次循环
        if (p == NULL)
        {
            continue;
        }

4、删除字符串前后的空格

代码语言:javascript
复制
        // 获取 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、完整代码示例

代码语言:javascript
复制
    // 逐行遍历 配置文件 中的文本数据
    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);
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、函数接口形参
  • 二、读取配置文件的逐行遍历操作
    • 1、读取配置文件的逐行遍历操作
      • 2、读取一行数据
        • 3、查找字符
          • 4、删除字符串前后的空格
            • 5、完整代码示例
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档