2017-02-12 95 views
1

我有一些列如何从一个特定的列在一个文本文件

name,age,address,gender 

我知道我可以访问符合getline();一个文本文件,但是当我得到的字符串与读取数据getline();返回的数据我想读一些特定的列。我怎么做 ?

我看到了一个解决这个问题,但它是在Java中,我还不知道,所以我决定发布这个在C++回答

+0

欢迎来到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)。 –

+2

文本文件没有列。文本文件有行。你将不得不自己“解码”“列”。 –

回答

1

不管你是用Java还是C++来问,这个方法都是类似的。

读完整行后。按行分隔符分行。

在Java中,它仅仅是

line.split(","); 

在C++中,你可以使用str.find(",")得到逗号的位置。然后将划分的令牌子字符串。

设置一个count变量来计算迄今为止分隔的令牌的数量,以获得您想要的列。

1

的方法是一样的:逐行读取文件中的行并标记,如果我想看第二列,则取第二个元素。 它可以改进,因为它有很多副本,但想法在这里。

#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; 
} 
+0

这是非常低效的。 –

+0

是的,它可以得到改善,但它显示了事情如何作为第一次切割。 – Gabriel

+1

你至少应该警告过度分配和复制。 –

0

您也可以使用strtok解析C字符串(如果您使用STL字符串将C字符串复制到字符数组!)。它会工作得很好,虽然需要一个单独的副本是由于strtok修改字符串以及一些静态内存(或者,也许,线程本地存储;我不会依赖于它)的事实

相关问题