• 使用C语言读取properties文件V1.0


    本程序使用C语言读取类似以下格式的properties文件。

    path = /etc/wgetrc

    launch_on_start = true


    下一版目标:

    (1)使用指针代替二维数据或者二维数据的容量减少至最低要求。

    (2)忽略所有空格,忽略空行及注释行

    (3)头文件规范写法。



    文件1:main.c

    #include <stdio.h>
    #include "read_properties.h"
    
    int main(void){
        
        char names[100][100], values[100][100];
    
        read_properties("/home/lujinhong/scripts/projects/read_properties_file/test.properties", names, values);
    
        return 0;
    }

    文件2:read_properties.h

    void read_properties(char *pathname, char names[100][100], char values[100][100]);

    文件3:read_properties.c

    /********************************************************************
     * This file is used to read the names and values from a properties file,
     * and store them in an array.
     *
     * ******************************************************************/
    
    #include "read_properties.h"
    #include <stdio.h>
    #include <unistd.h>
    #include "utils.h"
    
    void read_properties(char *pathname, char names[100][100], char values[100][100]){
    
        FILE *file;
        char line[100];
        int i = 0;
    
        file = fopen(pathname, "r");
        while(fgets(line, 100, file)){
            printf("%s", line);                             //just for test, delete it later.
            parseline(line, names[i], values[i]);
            i++;
        }
    
    
        fclose(file);
    
    }
    

    文件4:utils.h

    void parseline(char *line, char *name, char *value);

    文件5:utils.c

    /***********************************************************
     * Parse content of the line, and store the name and value. 
     * line example: path=/etc/wgetrc
     *
     * *********************************************************/
    void parseline(char *line, char *name, char *value){
         
        int length = 0, equal = 1; //equal will record the location of the '='
        char *begin;
    
        length = strlen(line);
    
        for(begin = line; *begin != '=' && equal <= length; begin ++){
                equal++;
        }
    
        strncpy(name, line, equal - 1); 
        line+=equal;
        strncpy(value, line, length - equal);
    
        printf("name = %s   value = %s\n", name, value); //just for test, delete it later.
    
    }

    运行结果:

    path = /etc/wgetrc
    name = path     value =  /etc/wgetrc
    
    launch_on_boot = true
    name = launch_on_boot   value =  true


  • 相关阅读:
    WIN10 激活
    unity 安装指定版本编辑器
    Object.assign 用于对象之间的合并
    mac 如何进入User 目录
    unity hub 个人版许可证获取失败
    [九、实用进阶]7使用Xcode的版本管理功能(SCM)
    [九、实用进阶]1隐藏顶部的状态栏
    [九、实用进阶]5正则表达式的使用
    [九、实用进阶]2列出设备上的所有字体
    [八、数据与网络]22使用URLSession上传图片至服务器
  • 原文地址:https://www.cnblogs.com/eaglegeek/p/4558015.html
Copyright © 2020-2023  润新知