2013-04-26 44 views
0

我想从Debian软件包的控制文件中读取数据,如下面的例子中,在C++:如何阅读控制在c + +中的Debian软件包?

Package: com.example.test 
Version: 1.0 
... 
Homepage: http://example.com 
... 

我可以用下面的代码读出来,但是当它在首页我只有获得“HTTP”:

string item; 

vector<string> data; 

stringstream str(line); 

while(getline(str, item, ':')) { 
    data.push_back(item); 
} 

我怎么能读“首页”为data[0],并与获取数据?

回答

1

只有指定:作为结束字段,当您读取第一个项目在一条线上。

std::string key, value; 

while (std::getline(infile, key, ':')) 
    std::getline(infile, value); 

相反字符串的键和值之间交替的向量的,我可能会使用一个std::map(或可能std::multimap),这是建立相当专门为情况是这样的:

std::map<std::string, std::string> package_data; 

while (std::getline(infile, key, ':')) { 
    std::getline(infile, value); 

    package_data[key] = value; 
} 

然后,你可以直接从键中查找数值:

std::string homepage = *package_data.find("Homepage"); 
+0

谢谢你的完美! – Rotciv 2013-04-26 15:51:27