• 使用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


  • 相关阅读:
    Intent.ACTION_TIME_TICK 广播
    Android ContentObserver
    android:duplicateParentState属性解释
    Android CursorAdapter
    android AndroidManifest.xml 多个android.intent.action.MAIN (
    PreferenceActivity详解
    WORD和WPS中英文混合的内容间距离很大怎么办?
    Android 屏幕适配
    OC第四课
    PL/SQL联系oracle成功可以sql解决的办法是检查表的名称无法显示
  • 原文地址:https://www.cnblogs.com/jediael/p/4304225.html
Copyright © 2020-2023  润新知