分页显示t_log
1、获取用户的输入
1.1、写一个Input成员函数,处理输入进来的语句
std::string XClient::Input()
{
//清空缓冲
//cin.ignore(4096, '\n');
string input = "";
for (;;)
{
char a = getchar();
if (a <= 0 || a == '\n' || a == '\r')
break;
cout << "*" << flush;
input += a;
}
return input;
}
1.2、将获取到的输入,传给cmd。定义vector容器,将得到的cmd输入进行分割,通过空格将内容分割成一块一块的。将分割好的内容写入vector容器里面
for (;;)
{
cout << "Input: " << flush;
string cmd = Input();
cout << cmd << endl;
//格式 log 1 10 第一页 1页10行
//切割空格 通过空格把内容切成一块一块的
vector<string>cmds;
char* p = strtok((char*)cmd.c_str(), " ");
while (p)
{
cmds.push_back(p);
p = strtok(0, " ");
}
string type = cmd;
if (cmds.size() > 0)
type = cmds[0];
if (type == "log")
{
c_log(cmds);
}
}
C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。
参数
- str -- 要被分解成一组小字符串的字符串。
- delim -- 包含分隔符的 C 字符串。
2、将得到的内容进行分页展示
//log 1 10 第一页 每页10条
void XClient::c_log(std::vector<std::string> cmds)
{
int pagecount = 10;
int page = 1;
if (cmds.size() > 1)
page = atoi(cmds[1].c_str());
if (cmds.size() > 2)
pagecount = atoi(cmds[2].c_str());
cout << "In log" << endl;
//limit 0 10 从0开始取10条语句
string sql = "select * from t_log limit ";
stringstream ss;
ss <<sql;
//如果是第二页,那么从(2-1)*10=10个开始
ss << (page - 1) * pagecount;
ss << ",";
ss << pagecount;
sql = ss.str();
auto rows = my->GetResult(sql.c_str());
//遍历每一行
for (auto row : rows)
{//遍历每一个字段 遍历每一列
for (auto c : row)
{
//打印出来
cout << c.data << " ";
}
cout << endl;
}
//int total = 0;
// cout << "Total: " << total << endl;
cout << "page= " << page << " pagecount=" << pagecount << endl;
}
3、测试
3.1、输入log 6 5(其中log就是想要读取的字段,也就是cmds[0],6是第6页,5是每页5条数据 (也就是现有的log将它分为每页是5条数据))
3.2、分析结果,现在分页的是第6页,那么他应该从26条数据开始
select *from t_log limit 25,5