📄 delete.h
字号:
#ifndef _DELETE_H
#define _DELETE_H
#include "common.h"
static int del_num = 0;
int deal_del(string& table_name,string& column_name,string& column_value);
void Write_File(string& table_name,ofstream& out);
int delete_data(const char* cmd_path)
{
ifstream in;
in.open(cmd_path);
if (!in.is_open())
{
cerr<<"can't open the file\n";
return 0;//can't open the file
}
string create_cmd="",temp;
bool right=false;// check the format
while(getline(in,temp))create_cmd+=" "+temp;//get all the string in the create file
//cout<<create_cmd;
in.close();
string::const_iterator beg = create_cmd.begin();
string::const_iterator end = create_cmd.end();
smatch result;
const string total("\\s*delete\\s+from\\s+(\\w+)\\s*where\\s+(\\w+)\\s*=\\s*(\\d+)");
regex reg(total);
string del_table_name,del_column_name,del_column_value;
string output_name = "0896170000_delete_"+To_String<int>(del_num) + ".txt";
ofstream out(output_name.c_str() ,ios::out);
del_num++;
clock_t start,finish;
start = clock();
while(regex_search(beg, end, result, reg))
{
del_table_name = result[1].str();
del_column_name = result[2].str();
del_column_value=result[3].str();
beg = result[0].second;
right=true;
cout<<del_column_value;
cout<<del_column_name;
cout<<del_table_name;
int return_code = deal_del(del_table_name,del_column_name,del_column_value);// delete the data
if (return_code == -1)
{
cerr<<"the Table wanted to be deleted is not exist!\n";
out.close();
return -1;
}
finish = clock();
out<<"Execute time: "<<double(finish - start) <<"ms\n";
out<<"Execute results:\n";
Write_File(del_table_name,out);// write the results to the file.
}
out.close();
if(!right)
return 1;
return 2;
}
void Write_File(string& table_name,ofstream& out)
{
map<string, list<column *> * >::iterator map_ptr;
map_ptr = SQL.find(table_name);
list<column*>::iterator ptr = (*(map_ptr->second)).begin();
for (;ptr!=(*(map_ptr->second)).end();++ptr)// get the table
{
list<string>::iterator vs_ptr =((*ptr)->data).begin();
for (;vs_ptr!= ((*ptr)->data).end();++vs_ptr)// get the column data
{
out<<*vs_ptr<<" \n";
}
}
}
void Erase_List(list<string>& str , int i)
{
list<string>::iterator str_ptr = str.begin();
int count = 0;
for (;str_ptr != str.end() ; ++str_ptr,++count)
if(count==i)
{
cout<<*str_ptr<<" ";
//log_out<<*str_ptr<<" ";
str.erase(str_ptr);
break ;
}
}
void Erase_Table(list<column*>& table_name,int i)
{
list<column*>::iterator ptr = table_name.begin();
for (;ptr!=table_name.end();++ptr)
{
//Erase_List((*ptr)->data , i,log_out);
list<string>::iterator str_ptr = ((*ptr)->data).begin();
int count = 0;
for (;str_ptr != ((*ptr)->data).end() ; ++str_ptr,++count)
if(count==i)
{
cout<<*str_ptr<<" ";
((*ptr)->data).erase(str_ptr);
break ;
}
}
cout<<"\n";
}
int deal_del(string& table_name,string& name,string& column_value)
{
map<string, list<column *> * >::iterator map_ptr;
map_ptr = SQL.find(table_name);
if(map_ptr==SQL.end())
{
cerr<<"table don't exist\n";
return -1;//table not exist
}
list<column*>::iterator ptr = (*(map_ptr->second)).begin();
//for_each((*(map_ptr->second)).begin(),(*(map_ptr->second)).end(),print());
for (;ptr!=(*(map_ptr->second)).end();++ptr)
{
if ((*ptr)->column_name==name)//find the column
{
list<string>::iterator vs_ptr =((*ptr)->data).begin();
int i = 0;// data index
for (;vs_ptr!= ((*ptr)->data).end();++vs_ptr,++i)// data list
if (*vs_ptr==column_value)//find the i
{
++vs_ptr;
Erase_Table(*(map_ptr->second),i);
--vs_ptr;// the point should be useable
}
}
}
return 0;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -