--- misc/mysql_splitter/splitter.cpp 2011/04/10 21:15:14 1283 +++ misc/mysql_splitter/splitter.cpp 2011/05/12 15:58:28 1462 @@ -1,9 +1,9 @@ #include -#include #include #include #include +#include #include #include @@ -18,10 +18,10 @@ string remove_comments(string in) { bool isComment = false; ostringstream out; - for (int i=0; i words; words = boost::split(words, input, boost::is_any_of(" ") ); string last = words.back(); - - boost::erase_all(last, ";"); boost::trim(last); - return last; } @@ -90,33 +89,41 @@ cout << "No file named " << inputfile << endl; return 1; } - - ifstream in( inputfile.c_str() ); - ofstream out; + + FILE* in = fopen( inputfile.c_str(), "r" ); + FILE* out = NULL; + //ifstream in( inputfile.c_str() ); + //ofstream out; ostringstream header; - if (!in.is_open() ) { + if ( in == NULL ) { cout << "Could not open " << argv[1] << endl; return 2; - } - - while ( in.good() ) { - in.getline(linebuf, BUFSIZE); + } + + time_t start = time(NULL); + + const char* SEARCH = "CREATE DATABASE"; + const int SEARCHLEN = strlen(SEARCH); - string line(linebuf); + while ( feof(in) == 0 && ferror(in) == 0 ) { + fgets(linebuf, BUFSIZE, in); //if (line.substr(0, 15) == "CREATE DATABASE" ) { - if ( boost::starts_with(line, "CREATE DATABASE") ) { + //if ( boost::starts_with(line, "CREATE DATABASE") ) { + if (strncmp(linebuf,SEARCH, SEARCHLEN) == 0) { - if (out.is_open() ) { - out.close(); + string line(linebuf); + + if (out != NULL ) { + fclose(out); } boost::trim(line); - string dbname = getLastWord(line); + string dbname = get_db_name(line); cout << ">" << dbname << endl; @@ -127,34 +134,44 @@ bool did_exist = boost::filesystem::exists(filename); - out.open( filename.c_str(), ios::app ); + //out.open( filename.c_str(), ios::app ); + out = fopen(filename.c_str(), "a"); - if (!out.is_open() ) { + if ( out == NULL ) { cout << "could not create outfile " << filename << endl; return 3; } if (!did_exist) { - out << header.str() << endl; //write preamble in new file + fputs(header.str().c_str(), out); + //out << header.str() << endl; //write preamble in new file } } - if (out.is_open() ) { - out << line << endl; + if (out != NULL ) { + fputs(linebuf, out); + //fputs("\n", out); + //out << linebuf << endl; } else { - header << line << endl; //collect preamble for later use + header << linebuf; //collect preamble for later use } } - if(out.is_open()) - out.close(); + if (out != NULL) + fclose(out); +// if (out.is_open()) +// out.close(); + + time_t end = time(NULL); + + cout << "Elapsed " << (end-start) << " seconds" << endl; - in.close(); + fclose(in); }