void process_line( void ) { bool anything_substituted; anything_substituted = remove_leading_space();// for " :TAG " constructs classify_record( *buff2 ); // classify script CW, GML tag or nothing if( !split_input_buffer() ) { // .* .cm .dm :cmt found } else { anything_substituted |= resolve_symvar_functions( buff2 ); if( input_cbs->fmflags & II_research && GlobalFlags.firstpass && anything_substituted ) { g_info_lm( inf_subst_line, buff2 ); // show line with substitution(s) } } buff2_lg = strlen( buff2 ); scan_start = buff2; scan_stop = buff2 + buff2_lg; return; }
void import(const std::string p_file_name,fichier_client_db & p_db) { ifstream l_input_file(p_file_name.c_str()); if(!l_input_file.is_open()) { cout << "ERROR : unable to open file \"" << p_file_name << "\"" << endl ; exit(-1); } string l_line = ""; uint32_t l_line_nb = 0; vector<facture_status> l_result_facture_status; p_db.get_facture_status_by_name(facture_status::get_non_checked_status(),l_result_facture_status,true); assert(l_result_facture_status.size()==1); facture_status l_facture_status = l_result_facture_status[0]; do { getline(l_input_file,l_line); ++l_line_nb; if(l_line.find("INSERT INTO") != string::npos) { bool l_condition = true; assert((l_condition ? true :(cout << "Message" << endl , false) )); // Extract table name size_t l_pos = l_line.find('`'); assert((l_pos != string::npos ? true :(cout << "Line " << l_line_nb << endl , false))); string l_table_name = l_line.substr(l_pos+1,l_line.find('`',l_pos+1)-l_pos-1); // Extract data l_pos = l_line.find('('); assert((l_pos != string::npos ? true :(cout << "Line " << l_line_nb << endl , false))); string l_data = l_line.substr(l_pos+1,l_line.find(')',l_pos+1)-l_pos-1); //Treat data if(l_table_name == "achat") { string l_result(""); l_data = extract_until(l_data,',',l_result,l_line_nb); uint32_t l_achat_id = strtol(remove_leading_space(l_result).c_str(),NULL,10); l_data = extract_until(l_data,',',l_result,l_line_nb); uint32_t l_client_id = strtol(remove_leading_space(l_result).c_str(),NULL,10); l_data = extract_until(l_data,',',l_result,l_line_nb); l_result = remove_leading_space(l_result); string l_date = l_result.substr(1,l_result.size()-2); l_data = extract_until(l_data,',',l_result,l_line_nb); uint32_t l_marque_id = strtol(remove_leading_space(l_result).c_str(),NULL,10); l_data = extract_until(l_data,',',l_result,l_line_nb); uint32_t l_type_id = strtol(remove_leading_space(l_result).c_str(),NULL,10); l_data = extract_until(l_data,',',l_result,l_line_nb); l_result = remove_leading_space(l_result); string l_reference = l_result.substr(1,l_result.size()-2); l_data = extract_until(l_data,',',l_result,l_line_nb); l_result = remove_leading_space(l_result); float l_prix_franc = strtof(l_result.substr(1,l_result.size()-2).c_str(),NULL); l_data = extract_until(l_data,',',l_result,l_line_nb); l_result = remove_leading_space(l_result); float l_prix_euro = strtof(l_result.substr(1,l_result.size()-2).c_str(),NULL); l_result = remove_leading_space(l_data); bool l_garantie = (l_result.substr(1,l_result.size()-2)) != "non"; // Search corresponding facture vector<facture> l_facture_result; p_db.get_by_date_and_client_id(l_date,l_client_id,l_facture_result); uint32_t l_facture_id = 0; if(l_facture_result.size()==0) { facture l_facture(0,l_client_id,l_date,0,l_facture_status.get_id(),0); p_db.create(l_facture); l_facture_id = l_facture.get_id(); } else if(l_facture_result.size() == 1) { l_facture_id = l_facture_result.front().get_id(); } else { cout << "ERROR : facture should be unique or not existing" << endl ; exit(-1); } // achat l_achat(l_achat_id,l_client_id,l_date,0,l_marque_id,l_type_id,l_reference,l_prix_franc,l_prix_euro,l_garantie); achat l_achat(l_achat_id,l_facture_id,l_marque_id,l_type_id,l_reference,l_prix_franc,l_prix_euro,l_garantie); #ifdef DEBUG_IMPORT_ACHAT cout << "Achat_id = \"" << l_achat_id << "\"" << endl ; cout << "Facture_id = \"" << l_facture_id << "\"" << endl ; // cout << "Client_id = \"" << l_client_id << "\"" << endl ; // cout << "Date = \"" << l_date << "\"" << endl ; cout << "Marque_id = \"" << l_marque_id << "\"" << endl ; cout << "type_id = \"" << l_type_id << "\"" << endl ; cout << "Reference = \"" << l_reference << "\"" << endl ; cout << "Prix_Franc = \"" << l_prix_franc << "\"" << endl ; cout << "Prix_Euro = \"" << l_prix_euro << "\"" << endl ; cout << "Garantie = \"" << l_garantie << "\"" << endl ; cout << l_achat << endl ; #endif p_db.create(l_achat); } else if(l_table_name == "client") { string l_result(""); l_data = extract_until(l_data,',',l_result,l_line_nb); uint32_t l_client_id = strtol(remove_leading_space(l_result).c_str(),NULL,10); l_data = extract_until(l_data,',',l_result,l_line_nb); l_result = remove_leading_space(l_result); string l_name = l_result.substr(1,l_result.size()-2); l_data = extract_until(l_data,',',l_result,l_line_nb); l_result = remove_leading_space(l_result); string l_first_name = l_result.substr(1,l_result.size()-2); size_t l_pos = l_data.find("'"); l_pos = l_data.find("'",l_pos+1); l_pos = l_data.find(",",l_pos); string l_address = remove_leading_space(l_data.substr(0,l_pos)); l_data = l_data.substr(l_pos+1); l_data = extract_until(l_data,',',l_result,l_line_nb); l_result = remove_leading_space(l_result); string l_tel = l_result.substr(1,l_result.size()-2); uint32_t l_ville_id = strtol(remove_leading_space(l_data).c_str(),NULL,10); client l_client(l_client_id,l_name,l_first_name,l_address,l_tel,l_ville_id); #ifdef DEBUG_IMPORT_CLIENT cout << "Client_id = \"" << l_client_id << "\"" << endl ; cout << "Name = \"" << l_name << "\"" << endl ; cout << "First name = \"" << l_first_name << "\"" << endl ; cout << "Address = \"" << l_address << "\"" << endl ; cout << "Tel = \"" << l_tel << "\"" << endl ; cout << "Ville_id = \"" << l_ville_id << "\"" << endl ; cout << l_client; #endif p_db.create(l_client); } else if(l_table_name == "marque") { string l_result(""); l_data = extract_until(l_data,',',l_result,l_line_nb); uint32_t l_marque_id = strtol(remove_leading_space(l_result).c_str(),NULL,10); l_result = remove_leading_space(l_data); string l_marque_name = l_result.substr(1,l_result.size()-2); marque l_marque(l_marque_id,l_marque_name); #ifdef DEBUG_IMPORT_MARQUE cout << "l_marque_id =\"" << l_marque_id << "\"" << endl ; cout << "Marque = \"" << l_marque_name << "\"" << endl ; cout << l_marque << endl ; #endif p_db.create(l_marque); } else if(l_table_name == "type") { string l_result(""); l_data = extract_until(l_data,',',l_result,l_line_nb); uint32_t l_type_id = strtol(remove_leading_space(l_result).c_str(),NULL,10); l_result = remove_leading_space(l_data); string l_type_name = l_result.substr(1,l_result.size()-2); type_achat l_type_achat(l_type_id,l_type_name); #ifdef DEBUG_IMPORT_TYPE cout << "type id = \"" << l_type_id << "\"" << endl ; cout << "type name = \"" << l_type_name << "\"" << endl ; cout << l_type_achat << endl ; #endif p_db.create(l_type_achat); } else if(l_table_name == "ville") { cout << l_line << endl ; cout << "table : \"" << l_table_name << "\"" << endl ; cout << "data : \"" << l_data << "\"" << endl ; string l_result(""); l_data = extract_until(l_data,',',l_result,l_line_nb); uint32_t l_ville_id = strtol(remove_leading_space(l_result).c_str(),NULL,10); l_data = extract_until(l_data,',',l_result,l_line_nb); l_result = remove_leading_space(l_result); string l_ville_name = l_result.substr(1,l_result.size()-2); l_result = remove_leading_space(l_data); string l_postal_code = l_result.substr(1,l_result.size()-2); ville l_ville(l_ville_id,l_ville_name,l_postal_code); #ifdef DEBUG_IMPORT_VILLE cout << "Ville id = \"" << l_ville_id << "\"" << endl ; cout << "Ville name = \"" << l_ville_name << "\"" << endl ; cout << "Postal code = \"" << l_postal_code << "\"" << endl ; cout << l_ville << endl ; #endif p_db.create(l_ville); } } } while(!l_input_file.eof() ); l_input_file.close(); }