我有一些列如何从一个特定的列在一个文本文件
name,age,address,gender
我知道我可以访问符合getline();
一个文本文件,但是当我得到的字符串与读取数据getline();
返回的数据我想读一些特定的列。我怎么做 ?
我看到了一个解决这个问题,但它是在Java中,我还不知道,所以我决定发布这个在C++回答
我有一些列如何从一个特定的列在一个文本文件
name,age,address,gender
我知道我可以访问符合getline();
一个文本文件,但是当我得到的字符串与读取数据getline();
返回的数据我想读一些特定的列。我怎么做 ?
我看到了一个解决这个问题,但它是在Java中,我还不知道,所以我决定发布这个在C++回答
不管你是用Java还是C++来问,这个方法都是类似的。
读完整行后。按行分隔符分行。
在Java中,它仅仅是
line.split(",");
在C++中,你可以使用str.find(",")
得到逗号的位置。然后将划分的令牌子字符串。
设置一个count
变量来计算迄今为止分隔的令牌的数量,以获得您想要的列。
的方法是一样的:逐行读取文件中的行并标记,如果我想看第二列,则取第二个元素。 它可以改进,因为它有很多副本,但想法在这里。
#include <sstream>
#include <string>
#include <boost/algorithm/string.hpp>
std::string line;
vector<string> strs;
std::ifstream infile("thefile.txt");
while (std::getline(infile, line))
{
strs.clear();
boost::split(strs,line,boost::is_any_of("\t"));
cout<<"age ="<<strs[1]<<endl;
}
您也可以使用strtok解析C字符串(如果您使用STL字符串将C字符串复制到字符数组!)。它会工作得很好,虽然需要一个单独的副本是由于strtok修改字符串以及一些静态内存(或者,也许,线程本地存储;我不会依赖于它)的事实
欢迎来到stackoverflow.com。请花些时间阅读[帮助页面](http://stackoverflow.com/help),尤其是名为[“我可以问些什么话题?”]的章节(http://stackoverflow.com/help/)讨论话题)和[“我应该避免问什么类型的问题?”](http://stackoverflow.com/help/dont-ask)。还请[参观](http://stackoverflow.com/tour)和[阅读如何提出好问题](http://stackoverflow.com/help/how-to-ask)。最后,请学习如何创建[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。 –
文本文件没有列。文本文件有行。你将不得不自己“解码”“列”。 –