博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
标准C处理类似INI配置文件的键值型文档
阅读量:4036 次
发布时间:2019-05-24

本文共 2060 字,大约阅读时间需要 6 分钟。

Linux下处理配置文档经常是个让人头痛的问题, 因为它不像Win32平台有INI文件处理的API或类对象, 这样, 我们就只能以字符流的方式来分析处理了, 下面的程序段实现了一个典型的处理配置文档的方法...

  /*
   读取并处理键值型文档
  */
  char name[20];
  byte age;
  char sex[8];
  int PropertyConfigurator (char *configFilename)
  {
   FILE* fp;
   int i;
   char line[256];
   char* pstr=(char*)NULL;
  
   if((fp = fopen(configFilename, "r")) == (FILE*)NULL) // configFileName是欲处理的配置文件名
   {
   printf("Can not open configfile/n"); // 是配置文档中的注释
   return 0;
   }
  
   else
   {
   while(fgets(line, 256, fp) !=(char*)NULL)
   {
    DeteteWhiteSpace(line); // Delete spaces
   if(line[0] == '#'); // '#' 是配置文档中的注释行
   continue;
   strupr(line); // Convert character to lowercase.
   if(pstr = strstr(line, "NAME")) // Process key-value
   {
   pstr = strstr(line, '=');
   DeteteWhiteSpace(++pstr);
   strcpy(name, pstr);
   }
  
   if(pstr = strstr(line, "AGE")) // Process key-value
   {
   pstr = strstr(line, '=');
   DeteteWhiteSpace(++pstr);
   age = atoi(pstr);
   }
   else if((pstr = strstr(line, "SEX"))) // Process key-value
   {
   pstr=strstr(line, '=');
   DeteteWhiteSpace(++pstr);
   strcpy(sex, pstr);
   }
   }
   }
  
   fclose(fp);
   return 1;
  }
  /*
   标准C不提供的两个函数
   itoa 将数字字符串转换成数值类型
   strupr 将字符串中的字符转换成大写
  */
  char* itoa(long value, char *string)
  { // Enough for a 128 bit integer
   if (string)
   sprintf(string, "%d", value);
   return string;
  }
  char* strupr(char *string)
  {
   if (string != NULL)
   {
   char *cp; // traverses string for C locale conversion */
   for (cp = string; *cp; ++cp)
   {
   if ('a' <= *cp && *cp <= 'z')
   *cp += 'A' - 'a';
   }
   return(string);
   } //C locale
   return NULL;
  }
  /*
   附加函数
   删除配置文档中的空行及空格
  */
  char* DeteteWhiteSpace(char* str) // Delete space
  {
   char strTemp[256];
   char strTemp2[256];
   unsigned int i,j;
   memset(strTemp, 0, 256);
   strcpy(strTemp2, str);
   j = 0;
   if (str != NULL)
   {
   for(i=0; i<strlen(str); i++)
   {
   if (strTemp2[i] != ' ')
   {
   strTemp[j++] = strTemp2[i];
   }
   }
   }
   strcpy(str, strTemp);
   return(str);
  }

转载地址:http://nvcdi.baihongyu.com/

你可能感兴趣的文章
linux安装usb wifi接收器
查看>>
补充自动屏蔽攻击ip
查看>>
谷歌走了
查看>>
多线程使用随机函数需要注意的一点
查看>>
getpeername,getsockname
查看>>
让我做你的下一行Code
查看>>
浅析:setsockopt()改善程序的健壮性
查看>>
关于对象赋值及返回临时对象过程中的构造与析构
查看>>
VS 2005 CRT函数的安全性增强版本
查看>>
SQL 多表联合查询
查看>>
Visual Studio 2010:C++0x新特性
查看>>
drwtsn32.exe和adplus.vbs进行dump文件抓取
查看>>
cppcheck c++静态代码检查
查看>>
在C++中使用Lua
查看>>
C++中使用Mongo执行count和distinct运算
查看>>
一些socket的编程经验
查看>>
socket编程中select的使用
查看>>
关于AIS编码解码的两个小问题
查看>>
GitHub 万星推荐:黑客成长技术清单
查看>>
可以在线C++编译的工具站点
查看>>