30/09/2018, 19:43

Khai báo hàm std::istream

Mình có hàm này để đọc dữ liệu từ file vào, nhưng mình chỉ muốn lấy một số cột trong khi file chứa nhiều cột hơn, hiện tại cái code này chắc rất thủ công: đọc từng cột cái nào ko lấy thì ghi bào biến rác ‘g’, còn lấy thì ghi vào biến cần ghi. Tuy nhiên có ng hướng dẫn mình dùng một hàm khác để đơn giản hóa code như sau nhưng mình ko biết làm thế nào để declare cho đúng trogn class “Data”. Nhờ cá bạn xem hộ mình.
//Hàm mình tự viết:

  void Data::read_simulated (const string &filepath)
    {
        ifstream data_out (filepath.c_str());
        if (!data_out)
            {cout<<"Failed to open"<<endl;}
        else
            {
            string id_p,age_p, dim_p, my_p, mcf_p, mcp_p, mcl_p, bw_p, bcs_p;
            string dummy_line, g;
            getline(data_out, dummy_line);

        while (data_out>>age_p>>g>>g>>g>>g>>g>>g>>g>>bcs_p>>g>>g>>my_p>>g>>g>>bw_p>>g>>g>>dim_p>>g>>g>>g>>
               g>>g>>g>>g>>g>>g>>g>>g>>g>>g)
            {
            //s.cow_id.push_back(get_number(id_p));
            if (get_number(age_p)>=1424.0 &&get_number(age_p)<=1733.0)
            {
            age_pre.push_back(age_p);
            dim_pre.push_back(dim_p);
            my_pre.push_back(my_p);
            bw_pre.push_back(bw_p);
            bcs_pre.push_back(bcs_p);
            }
            }
            data_out.close();
    }

//Hàm viết lại theo ý tưởng khác, cữ báo lỗi

std::istream &skip_row(std::istream &is, unsigned int count)
{
    std::string s;

    while(count-- && is >> s) {}

    return is;
} 

void Data::read_simulated (const string &filepath)
        {
            ifstream data_out (filepath.c_str());
            if (!data_out)
                {cout<<"Failed to open"<<endl;}
            else
                {
                string id_p,age_p, dim_p, my_p, mcf_p, mcp_p, mcl_p, bw_p, bcs_p;
                string dummy_line, g;
                getline(data_out, dummy_line);

            while (data_out>>age_p && skip_row (data_out, 7) && data_out>>bcs_p && skip_row (data_out, 2) && data_out>>my_p && skip_row (data_out, 2) && data_out >>bw_p && skip_row (data_out, 3) && data_out>>dim_p && skip_row (data_out, 14)
                {
                //s.cow_id.push_back(get_number(id_p));
                if (get_number(age_p)>=1424.0 &&get_number(age_p)<=1733.0)
                {
                age_pre.push_back(age_p);
                dim_pre.push_back(dim_p);
                my_pre.push_back(my_p);
                bw_pre.push_back(bw_p);
                bcs_pre.push_back(bcs_p);
                }
                }
                data_out.close();
        }
Bài liên quan
0