2009-11-18 83 views
1

我有一个数据文件,我需要从每一行读取数据并存储它。然后根据这些数据之一的值将数据存储在数组中,以便我可以计算所有这些数据的中值。如何从C++文件读取结构化数据?

数据的线是人口统计信息,并且根据所述地理位置,一个人的地址。我需要捕捉他们的年龄,然后找到居住在特定街道上的人的中位数。

所以数据集15万条记录,每条记录有26场,很多这些领域是一个地址段,然后等领域都只是数字,年龄,门牌号以及诸如此类的事情。

因此,我需要做的是通过行读取,然后如果记录中的某个字段满足特定条件,我需要从记录中捕获一个字段并将其存储在一个数组中,以便我可以计算出中值例如,居住在“橡树街”的人。

我的条件逻辑,并且可以工作理清了,但我在C++的iostream对象不舒服,像实例化一个ifstream的对象,然后从文件本身读取。

噢我忘了该数据是逗号分隔值的文件。

+2

你有什么麻烦? –

+0

也给我们介绍一下文件格式,输入预期的输出 – RageZ

+0

我试图创建我自己的工作小特设解决方案的更多细节:) – ihtkwot

回答

3

对于逗号分隔的输入:

using namespace std; 
ifstream file; 
string line; 
while(getline(file, line)) { 
    istringstream stream(line); 
    string data[3]; 
    for(int ii = 0; ii < sizeof data/sizeof data[0]; ++ii) 
     if(!getline(stream, data[ii], ',')) 
      throw std::runtime_error("invalid data"); 
    // process data here 
} 

对于空格分隔输入(原来的答案):

using namespace std; 
ifstream file; 
string line; 
while(getline(file, line)) { 
    int datum1; 
    string datum2; 
    double datum3; 
    istringstream stream(line); 
    if(!(line >> datum1 >> datum2 >> datum3)) 
     throw std::runtime_error("invalid data"); 
    // process data here 
} 

这些方法不会赢得任何性能奖品,但我希望他们相当可靠和容易理解。

+0

谢谢约翰我会试一试 – ihtkwot

+0

如果基准点是逗号分隔的,那么'datum1 >> datum1' datum2 >> datum3'会起作用吗? –

+0

不,如果这些字段之间用逗号分隔,请参阅我正在发布的代码的第二位。 –

1

这听起来像是一个SQL光风格的嵌入式数据库完美的问题。然后,您可以拥有任意数量的标准SQL功能,而无需重新编写轮子。

+0

SQL有很高的学习曲线吗?我全职工作并全职上学,而且我目前还没有在任何课程中学习SQL,但我可以尝试将它放在一边。 – ihtkwot

+0

不是为了你在做什么。 – rerun

+0

我将不得不考虑SQL,因为我知道两个人在办公室里做了很多工作,但我不确定他们有多精通,所以如果我能够加快一点速度我可以帮助他们。 – ihtkwot

相关问题