#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;
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgICNpbmNsdWRlIDxzc3RyZWFtPgogICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICAgICAKICAgIHN0cnVjdCBSRVFVRVNUCiAgICB7CiAgICAgICAgdW5zaWduZWQgaW50IGFzdTsKICAgICAgICB1bnNpZ25lZCBpbnQgbGJhOwogICAgICAgIGxvbmcgc2l6ZTsKICAgICAgICBjaGFyIG9wY29kZTsKICAgICAgICBkb3VibGUgdGltZXN0YW1wOwogICAgIAogICAgICAgIFJFUVVFU1QoKQogICAgICAgIHsKICAgICAgICAgICAgYXN1ID0gMDsKICAgICAgICAgICAgbGJhID0gMDsKICAgICAgICAgICAgc2l6ZSA9IDA7CiAgICAgICAgICAgIG9wY29kZSA9ICcgJzsKICAgICAgICAgICAgdGltZXN0YW1wID0gMDsKICAgICAgICB9CiAgICB9OwogICAgIAogICAgaXN0cmVhbSYgZ2V0cmVjb3JkKGlzdHJlYW0mIHMsIFJFUVVFU1QmIHJlcSkKICAgIHsKICAgIAlzdHJpbmcgcGFydDsKICAgIAlib29sIHJlc3VsdCA9IAogICAgICAgICAgICBnZXRsaW5lKHMsIHBhcnQsICcsJykgJiYKICAgIAkgICAgICAgIChpc3RyaW5nc3RyZWFtKHBhcnQpID4+IHJlcS5hc3UpICYmCiAgICAJICAgIGdldGxpbmUocywgcGFydCwgJywnKSAmJgogICAgCSAgICAgICAgKGlzdHJpbmdzdHJlYW0ocGFydCkgPj4gcmVxLmxiYSkgJiYKICAgIAkgICAgZ2V0bGluZShzLCBwYXJ0LCAnLCcpICYmCiAgICAJICAgICAgICAoaXN0cmluZ3N0cmVhbShwYXJ0KSA+PiByZXEuc2l6ZSkgJiYKICAgIAkgICAgZ2V0bGluZShzLCBwYXJ0LCAnLCcpICYmCiAgICAJICAgICAgICAocGFydC5zaXplKCkgPT0gMSkgPyAocmVxLm9wY29kZSA9IHBhcnRbMF0sIHRydWUpIDogZmFsc2UgJiYKICAgIAkgICAgZ2V0bGluZShzLCBwYXJ0LCAnLCcpICYmCiAgICAJICAgICAgICAoaXN0cmluZ3N0cmVhbShwYXJ0KSA+PiByZXEudGltZXN0YW1wKTsKICAgIAlpZiAoIXJlc3VsdCAmJiBzKQogICAgCSAgICBzLnNldHN0YXRlKGlvczo6ZmFpbGJpdCk7CiAgICAgICAgcmV0dXJuIHM7CiAgICB9CiAgICAgCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAJc3RyaW5nIG9yaWdpbmFsKCIwLDMwMzU2NywzNTg0LHcsMC4wMDAwMDAiKTsKICAgICAKICAgICAgICBSRVFVRVNUIHJlcTsKICAgICAgICBpc3RyaW5nc3RyZWFtIG9yaWdzKG9yaWdpbmFsKTsKICAgICAgICBpZiAoZ2V0cmVjb3JkKG9yaWdzLCByZXEpKQogICAgICAgIHsKICAgICAgICAJY291dCA8PCAiYXN1ID0gIiA8PCByZXEuYXN1IDw8CiAgICAgICAgCSAgICAgICAgIiwgbGJhID0gIiA8PCByZXEubGJhIDw8CiAgICAgICAgCSAgICAgICAgIiwgc2l6ZSA9ICIgPDwgcmVxLnNpemUgPDwKICAgICAgICAJICAgICAgICAiLCBvcGNvZGUgPSAiIDw8IHJlcS5vcGNvZGUgPDwKICAgICAgICAJICAgICAgICAiLCB0aW1lc3RhbXAgPSAiIDw8IHJlcS50aW1lc3RhbXA7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgCWNvdXQgPDwgIkZBSUxFRCI7CiAgICAgICAgfQogICAgIAogICAgICAgIHJldHVybiAwOwogICAgfQ==