比较两个数据文件

时间:2015-07-14 10:34:53

标签: c++ arrays

我有两个数据文件,其中有一些数据点具有相同的值,我需要生成和输出,其中我只有公共数据点。

这是我的代码:

#include<iostream>
#include<cmath>
#include<fstream>

using namespace std;

int main()

{
  long double p_1,pd_1, age, mag, p_2, pd_2, dm_2, tsc_2, s_2, d_2, lum_2;
   double data1[1659];
double data2[1688];

std::ifstream fin ("sort.txt",std::ifstream::in);
std::ifstream gin ("sort1.txt", std::ifstream::in);

for(int i=0; i<1659; i++)
{
    fin>> p_1 >> pd_1 >> age >> mag;
    data1[i]= p_1;
}
for(int i=0; i<1688; i++)
{
    gin>> p_2 >> pd_2 >> dm_2 >> tsc_2 >> s_2 >> d_2 >> lum_2;
    data2[i]= p_2;
}

for(int i=0; i<1659; i++)
{
    if(data1[i]==data2[i])
        cout<<p_2<<"\t"<<pd_2<<"\t"<<dm_2<<"\t"<<tsc_2<<"\t"<<s_2<<"\t"<<d_2<<"\t"<<lum_2<<endl;
}

return(0);

}

我没有生成和输出文件,因为我想看看我的输出是什么样的。请帮帮我。

1 个答案:

答案 0 :(得分:0)

如果订购了您的数据,这应该可行。

此代码非常差,将其用作草稿。 (magic numbers等)

#include <iostream>
#include <cmath>
#include <fstream>

using namespace std;

struct rec1 {
    long double p_1, pd_1, age, mag;
};

struct rec2 {
    long double p_2, pd_2, dm_2, tsc_2, s_2, d_2, lum_2;
};

int main()
{
    rec1 data1[1659];
    rec2 data2[1688];

    std::ifstream fin("sort.txt", std::ifstream::in);
    std::ifstream gin("sort1.txt", std::ifstream::in);

    for (int i = 0; i<1659; i++)
    {
        fin >> data1[i].p_1 >> data1[i].pd_1 >> data1[i].age >> data1[i].mag;
    }

    for (int j = 0; j<1688; j++)
    {
        gin >> data2[j].p_2 >> data2[j].pd_2 >> data2[j].dm_2 >> data2[j].tsc_2 >> data2[j].s_2 >> data2[j].d_2 >> data2[j].lum_2;
    }

    int i = 0, j = 0;
    while (i < 1659 && j < 1688)
    {
        if (data1[i].p_1 < data2[j].p_2) i++;
        else if (data1[i].p_1 > data2[j].p_2) j++;
        else {
            cout << data2[j].p_2 << "\t" << data2[j].pd_2 << "\t" << data2[j].dm_2 << "\t" << data2[j].tsc_2 << "\t" << data2[j].s_2 << "\t" << data2[j].d_2 << "\t" << data2[j].lum_2 << endl;
            i++; j++;
        }
    }

    fin.close();
    gin.close();

    return 0;
}

请注意,不必将整个数据集存储在内存中。你可以“在飞行中”进行交叉。