我有两个数据文件,其中有一些数据点具有相同的值,我需要生成和输出,其中我只有公共数据点。
这是我的代码:
#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);
}
我没有生成和输出文件,因为我想看看我的输出是什么样的。请帮帮我。
答案 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;
}
请注意,不必将整个数据集存储在内存中。你可以“在飞行中”进行交叉。