我必须从两个.dat文件中读取数据,但我的输出功能有问题,我的C ++技能仍然生锈有人可以帮忙吗?
使用条带化从residents.dat读取地址记录的子集。对于n>进程,每个进程评估一个唯一的子集 基于每第n条记录的记录。此记录的数量 子集应该大约是#-of-residence-records /#-of-processes。在所使用的所有并行处理中,不应省略任何地址,并且>不应处理多次。也 请注意,任何一次只能将一条记录存储在内存中 处理;不要将整个数据集读入内存中的数据结构 因为这完全没必要,占用太多RAM!
数据示例
329267.349 4847214.382
318141.019 4851350.892
319526.06 4850474.347
322666.48 4840244.995
316578.529 4837299.827
320090.607 4840439.088
//read file and populate the vectors
ifstream foodbankFile("/Users/abdallaelnajjar/Documents/XCodeProjects/cpp_projects/MPI_Project2/foodbanks.dat");
ifstream residenceFile("/Users/abdallaelnajjar/Documents/XCodeProjects/cpp_projects/MPI_Project2/residences.dat");
// populate datavector
std::vector<Foodbank> foodbankData((std::istream_iterator<Foodbank>(foodbankFile)),
std::istream_iterator<Foodbank>());
//std::vector<Residence> residenceData((std::istream_iterator<Residence>(residenceFile)),
//std::istream_iterator<Residence>());
std::vector<double> distancess;
string file_contents;
Residence res;
int numProcs = 1;
int recCount = 0;
//pseudo code that I trying to implement
// While(there are more records){
// If record count % numProcs == myID
// ProcessRecord
// else
// Increment file stream pointer forward one record without processing
// Increment Record Count
//}
int numLines = 1;
while(!residenceFile.eof())
{
residenceFile >> res.x >>res.y;
//distancess.push_back(populate_distancesVector(res,foodbankData));
if ( recCount % numProcs == numLines)
{
//call the process
distancess.push_back(populate_distancesVector(res,foodbankData));
}
else
++numLines;
++recCount;
}
答案 0 :(得分:1)
您最有可能因为您的文件未被打开而无法获得结果。最有可能的是,初始化fstream
时,您没有正确指向它。这就是为什么你没有看到任何输出。
在对其进行任何其他操作之前,您应该始终检查streams
是否已打开(可访问)。要检查它是否已正确打开:
if (foodBankData.is_open()) {
Foodbank f;
while(foodbankData >> f.x >> f.y )
{
cout<< "X"<< f.x << "Y" <<f.y << endl; //don't forget the newline here
}
}
else {
cerr << "Error opening input file!" << endl;
exit(1);//call the error function or something else here.
}