    #include <iostream>
    #include <sstream>
    using namespace std;
     
    struct REQUEST
    {
        unsigned int asu;
        unsigned int lba;
        long size;
        char opcode;
        double timestamp;
     
        REQUEST()
        {
            asu = 0;
            lba = 0;
            size = 0;
            opcode = ' ';
            timestamp = 0;
        }
    };
     
    istream& getrecord(istream& s, REQUEST& req)
    {
    	string part;
    	bool result = 
            getline(s, part, ',') &&
    	        (istringstream(part) >> req.asu) &&
    	    getline(s, part, ',') &&
    	        (istringstream(part) >> req.lba) &&
    	    getline(s, part, ',') &&
    	        (istringstream(part) >> req.size) &&
    	    getline(s, part, ',') &&
    	        (part.size() == 1) ? (req.opcode = part[0], true) : false &&
    	    getline(s, part, ',') &&
    	        (istringstream(part) >> req.timestamp);
    	if (!result && s)
    	    s.setstate(ios::failbit);
        return s;
    }
     
    int main()
    {
    	string original("0,303567,3584,w,0.000000");
     
        REQUEST req;
        istringstream origs(original);
        if (getrecord(origs, req))
        {
        	cout << "asu = " << req.asu <<
        	        ", lba = " << req.lba <<
        	        ", size = " << req.size <<
        	        ", opcode = " << req.opcode <<
        	        ", timestamp = " << req.timestamp;
        }
        else
        {
        	cout << "FAILED";
        }
     
        return 0;
    }