如何使用条带化算法读取residence.dat文件C ++

时间:2013-11-09 02:27:45

标签: c++

我必须从两个.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;
        }

1 个答案:

答案 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.
}