zoukankan      html  css  js  c++  java
  • linux读取按行读写文本文件

    1.#include <stdio.h>
    
    2.#include <unistd.h>
    
    3.#include <fcntl.h>
    
    4.#include <string.h>
    
    5.#include <malloc.h>
    
    6.#include <stdlib.h> 
    
    7.
    
    8.
    
    9.typedef struct item_t {
    
    10.    char *key;
    
    11.    char *value;
    
    12.}ITEM;
    
    13.
    
    14./*
    
    15. *去除字符串右端空格
    
    16. */
    
    17.char *strtrimr(char *pstr)
    
    18.{
    
    19.    int i;
    
    20.    i = strlen(pstr) - 1;
    
    21.    while (isspace(pstr[i]) && (i >= 0))
    
    22.        pstr[i--] = '\0';
    
    23.    return pstr;
    
    24.}
    
    25./*
    
    26. *去除字符串左端空格
    
    27. */
    
    28.char *strtriml(char *pstr)
    
    29.{
    
    30.    int i = 0,j;
    
    31.    j = strlen(pstr) - 1;
    
    32.    while (isspace(pstr[i]) && (i <= j))
    
    33.        i++;
    
    34.    if (0<i)
    
    35.        strcpy(pstr, &pstr[i]);
    
    36.    return pstr;
    
    37.}
    
    38./*
    
    39. *去除字符串两端空格
    
    40. */
    
    41.char *strtrim(char *pstr)
    
    42.{
    
    43.    char *p;
    
    44.    p = strtrimr(pstr);
    
    45.    return strtriml(p);
    
    46.}
    
    47.
    
    48.
    
    49./*
    
    50. *从配置文件的一行读出key或value,返回item指针
    
    51. *line--从配置文件读出的一行
    
    52. */
    
    53.int get_item_from_line(char *line, struct item_t *item)
    
    54.{
    
    55.    char *p = strtrim(line);
    
    56.    int len = strlen(p);
    
    57.    if(len <= 0){
    
    58.        return 1;//空行
    
    59.    }
    
    60.    else if(p[0]=='#'){
    
    61.        return 2;
    
    62.    }else{
    
    63.        char *p2 = strchr(p, '=');
    
    64.        *p2++ = '\0';
    
    65.        item->key = (char *)malloc(strlen(p) + 1);
    
    66.        item->value = (char *)malloc(strlen(p2) + 1);
    
    67.        strcpy(item->key,p);
    
    68.        strcpy(item->value,p2);
    
    69.
    
    70.        }
    
    71.    return 0;//查询成功
    
    72.}
    
    73.
    
    74.int file_to_items(const char *file, struct item_t *items, int *num)
    
    75.{
    
    76.    char line[1024];
    
    77.    FILE *fp;
    
    78.    fp = fopen(file,"r");
    
    79.    if(fp == NULL)
    
    80.        return 1;
    
    81.    int i = 0;
    
    82.    while(fgets(line, 1023, fp))
    
    83.    {
    
    84.        char *p = strtrim(line);
    
    85.        int len = strlen(p);
    
    86.        if(len <= 0)
    
    87.        {
    
    88.            continue;
    
    89.        }
    
    90.        else if(p[0]=='#')
    
    91.        {
    
    92.            continue;
    
    93.        }
    
    94.        else
    
    95.        {
    
    96.            char *p2 = strchr(p, '=');
    
    97.            /*这里认为只有key没什么意义*/
    
    98.            if(p2 == NULL)
    
    99.                continue;
    
    100.            *p2++ = '\0';
    
    101.            items[i].key = (char *)malloc(strlen(p) + 1);
    
    102.            items[i].value = (char *)malloc(strlen(p2) + 1);
    
    103.            strcpy(items[i].key,p);
    
    104.            strcpy(items[i].value,p2);
    
    105.
    
    106.            i++;
    
    107.        }
    
    108.    }
    
    109.    (*num) = i;
    
    110.    fclose(fp);
    
    111.    return 0;
    
    112.}
    
    113.
    
    114./*
    
    115. *读取value
    
    116. */
    
    117.int read_conf_value(const char *key,char *value1,const char *file)
    
    118.{
    
    119.    char line[1024];
    
    120.    char *key1,*key3,*key2;
    
    121.    FILE *fp;
    
    122.    fp = fopen(file,"r");
    
    123.    if(fp == NULL)
    
    124.        return 1;//文件打开错误
    
    125.    while (fgets(line, 1023, fp)){
    
    126.        ITEM item;
    
    127.        get_item_from_line(line,&item);
    
    128.        if(!strcmp(item.key,key)){
    
    129.
    
    130.            strcpy(value1,item.value);
    
    131.            fclose(fp);
    
    132.            free(item.key);
    
    133.            free(item.value);
    
    134.            break;
    
    135.        }
    
    136.    }
    
    137.    return 0;//成功
    
    138.
    
    139.}
    
    140.int write_conf_value(const char *key,char *value,const char *file)
    
    141.{
    
    142.    ITEM items[20];// 假定配置项最多有20个
    
    143.    int num;//存储从文件读取的有效数目
    
    144.    file_to_items(file, items, &num);
    
    145.
    
    146.    int i=0;
    
    147.    //查找要修改的项
    
    148.    for(i=0;i<num;i++){
    
    149.        if(!strcmp(items[i].key, key)){
    
    150.            items[i].value = value;
    
    151.            break;
    
    152.        }
    
    153.    }
    
    154.
    
    155.    // 更新配置文件,应该有备份,下面的操作会将文件内容清除
    
    156.    FILE *fp;
    
    157.    fp = fopen(file, "w");
    
    158.    if(fp == NULL)
    
    159.        return 1;
    
    160.
    
    161.    i=0;
    
    162.    for(i=0;i<num;i++){
    
    163.        fprintf(fp,"%s=%s\n",items[i].key, items[i].value);
    
    164.        //printf("%s=%s\n",items[i].key, items[i].value);
    
    165.    }
    
    166.    fclose(fp);
    
    167.    //清除工作
    
    168. /*i=0;
    
    169.    for(i=0;i<num;i++){
    
    170.        free(items[i].key);
    
    171.        free(items[i].value);
    
    172.    }*/
    
    173.
    
    174.    return 0;
    
    175.
    
    176.}
    
    177.
    
    178.void main(void)
    
    179.{
    
    180.    char *key;
    
    181.    char *value=NULL,*value1=NULL;
    
    182.    char *file;
    
    183.    file="/home/wangwei/ww/file/from_file";
    
    184.
    
    185.    key="IP";
    
    186.    value=(char *)malloc(sizeof(char)*30);
    
    187.    value1=(char *)malloc(sizeof(char)*30);
    
    188.    read_conf_value(key,value,file);
    
    189.    printf("IP = %s\n",value);
    
    190.
    
    191.    key="MASK";
    
    192.    read_conf_value(key,value,file);
    
    193.    printf("MASK = %s\n",value);
    
    194.
    
    195.    key="GATEWAY";
    
    196.    read_conf_value(key,value,file);
    
    197.    printf("GATEWAY = %s\n",value);
    
    198.    free(value);
    
    199.    free(value1);
    
    200.    value=NULL;
    
    201.    value1=NULL;
    
    202.}
    

      

  • 相关阅读:
    thymeleaf 模板使用 之 解决因HTML标签未闭合引起的错误
    Spring MVC 拦截器
    Spring boot data jpa 示例
    Hibernate 数据库方言
    Springboot 之 静态资源路径配置
    Java 时间不一致
    IntelliJ IDEA 2017.3.2 热加载(Hot Swap)
    IntelliJ IDEA Spring boot devtools 实现热部署
    Python-集合
    Python-文件读写及修改
  • 原文地址:https://www.cnblogs.com/newstart/p/3069499.html
Copyright © 2011-2022 走看看