C++ 读取xml类似的文件

本文介绍了一个使用C++实现的简单配置文件解析器,该解析器能够从指定的配置文件中读取特定项的值。通过示例展示了如何定义开始标签和结束标签来定位配置项,并读取其间的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. #include <fstream>  
  2. #include <iostream>  
  3. #include <string>  
  4.   
  5.   
  6. int getNameValue(char *name, char *value)  
  7. {  
  8.     std::ifstream file;  
  9.     std::string buf, bufFromFile, beginName, endName;  
  10.       
  11.     int begin, end;  
  12.   
  13.     if (name == NULL || value == NULL) {  
  14.         std::cout << "name and value is invalid" << std::endl;  
  15.         exit(1);  
  16.     }  
  17.   
  18.     beginName.append("<");  
  19.     beginName.append(name);  
  20.     beginName.append(">");  
  21.   
  22.     endName.append("</");  
  23.     endName.append(name);  
  24.     endName.append(">");  
  25.       
  26.     file.open("MyIp.config");  
  27.     if (!file.is_open()) {  
  28.         std::cout << "error in open file ";  
  29.         exit(1);  
  30.     }  
  31.   
  32.       
  33.     while (!file.eof()) {  
  34.         file >> bufFromFile;  
  35.         buf += bufFromFile;  
  36.     }  
  37.     file.close();  
  38.   
  39.     std::cout << buf << std::endl;  
  40.   
  41.     begin = buf.find(beginName);  
  42.     end = buf.find(endName);  
  43.   
  44.     //std::cout << begin << " " << end << std::endl;  
  45.   
  46.     if (begin < 0 || end < 0) {  
  47.         std::cout << "can't find " << name << " Item" << std::endl;  
  48.         exit(1);  
  49.     }  
  50.     if (begin >= end) {  
  51.         std::cout << "error in find " << name << " Item" << std::endl;  
  52.         exit(1);  
  53.     }  
  54.     for (int i = 0; i < end - begin - beginName.length(); i++) {  
  55.         value[i] = buf.at(begin + beginName.length() + i);  
  56.     }  
  57.   
  58.     value[end - begin - beginName.length()] = '\0';  
  59. }  
  60.   
  61. int main(int argc, char* argv[])  
  62. {  
  63.     char *name = "IP";  
  64.     char *value = NULL;  
  65.     int port;  
  66.       
  67.       
  68.     value = new char[100];  
  69.   
  70.     getNameValue(name, value);  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值