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

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

文章目录

一、函数接口形参

二、读取配置文件的逐行遍历操作

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 字符串两侧 ;


2、读取一行数据


       // 获取一行数据

// 获取一行数据
        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);
    }


目录
相关文章
|
Linux C语言 iOS开发
C语言结合AWTK开发HTTP接口访问界面
这样,我们就实现了在C语言中使用libcurl和AWTK来访问HTTP接口并在界面上显示结果。这只是一个基础的示例,你可以根据需要添加更多的功能和优化。例如,你可以添加错误处理机制、支持更多HTTP方法(如POST、PUT等)、优化用户界面等。
733 82
|
12月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
503 15
|
存储 算法 C语言
【C语言】字符常量详解
字符常量是C语言中处理字符数据的重要工具。通过单引号括起一个字符,我们可以方便地使用字符常量进行字符判断、字符运算和字符串处理等操作。理解字符常量的表示方法、使用场景和ASCII码对应关系,对于编写高效的C语言程序至关重要。
1533 11
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
726 10
|
存储 C语言 开发者
【C语言】格式化输出占位符及其标志字符详解(基于ISO/IEC 9899:2024)
在C语言中,格式化输出通过 `printf` 函数等格式化输出函数来实现。格式说明符(占位符)定义了数据的输出方式,标准ISO/IEC 9899:2024(C23)对这些格式说明符进行了详细规定。本文将详细讲解格式说明符的组成部分,包括标志字符、宽度、精度、长度修饰符和类型字符,并适当增加表格说明。
1478 6
|
C语言 开发者
C语言中的模块化编程思想,介绍了模块化编程的概念、实现方式及其优势,强调了合理划分模块、明确接口、保持独立性和内聚性的实践技巧
本文深入探讨了C语言中的模块化编程思想,介绍了模块化编程的概念、实现方式及其优势,强调了合理划分模块、明确接口、保持独立性和内聚性的实践技巧,并通过案例分析展示了其应用,展望了未来的发展趋势,旨在帮助读者提升程序质量和开发效率。
911 5
|
存储 算法 C语言
C语言中常见的字符串处理技巧,包括字符串的定义、初始化、输入输出、长度计算、比较、查找与替换、拼接、截取、转换、遍历及注意事项
本文深入探讨了C语言中常见的字符串处理技巧,包括字符串的定义、初始化、输入输出、长度计算、比较、查找与替换、拼接、截取、转换、遍历及注意事项,并通过案例分析展示了实际应用,旨在帮助读者提高编程效率和代码质量。
940 4
C语言字符(串)函数
C语言字符(串)函数
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现
309 0
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
923 23