/* * ExtractReviews * (c) Markus Lumpe, V1.0 * */ #include #include #include using namespace std; void skipTab( ifstream& In ) { char lChar = '\0'; In.get( lChar ); if ( lChar != '\t' ) In.unget(); } void readToTab( ifstream& In, string& Value ) { char lChar = '\0'; string Result(""); for ( ; ; ) { In.get( lChar ); if ( lChar == '\t' ) break; Result += lChar; } Value = Result; } void readReview( ifstream& In, string& Value ) { char lChar = '\0'; string Result(""); for ( ; ; ) { In.get( lChar ); if ( lChar == '"' ) { char lChar1; In.get( lChar1 ); if ( lChar1 != '"' ) { In.unget(); continue; } } if ( (int)lChar == 0x0d ) { In.get( lChar ); if ( (int)lChar != 0x0a ) In.unget(); break; } Result += lChar; } Value = Result; } string makeNumber( int N ) { string Result(""); while ( N != 0 ) { Result = (char)((int)'0' + (N%10)) + Result; N /= 10; } return Result; } int main( int argc, char *argv[] ) { // check number of arguments if ( argc < 2 ) { cerr << "Missing argument." << endl; return 1; } // open streams ifstream lReader; ofstream lOutput; lReader.open( argv[1] ); if ( lReader.fail() ) { cerr << "Cannot open file \'" << argv[1] << "\'." << endl; return 1; } // // Read line -> one review // // Paper ID, Paper Title, Paper Score, Reviewer's Confidence, Detailed Review // separated by \t, terminated by \n for (; ;) { int lPaperId; string lPaperTitle[3]; string lPaperScore[3]; string lConfidence[3]; string lReview[3]; int lTemp; // read first if ( lReader >> lPaperId ) { skipTab( lReader ); readToTab( lReader, lPaperTitle[0] ); readToTab( lReader, lPaperScore[0] ); readToTab( lReader, lConfidence[0] ); readReview( lReader, lReview[0] ); // read second lReader >> lTemp; skipTab( lReader ); readToTab( lReader, lPaperTitle[1] ); readToTab( lReader, lPaperScore[1] ); readToTab( lReader, lConfidence[1] ); readReview( lReader, lReview[1] ); // read third; lReader >> lTemp; skipTab( lReader ); readToTab( lReader, lPaperTitle[2] ); readToTab( lReader, lPaperScore[2] ); readToTab( lReader, lConfidence[2] ); readReview( lReader, lReview[2] ); // write review ofstream lOutput; cout << "Build Review for Paper# " << lPaperId << endl; string lOutName( "Output/Reviews-Paper-" + makeNumber( lPaperId ) ); lOutName += ".html"; lOutput.open( lOutName.c_str() ); if ( lOutput.fail() ) { cerr << "Cannot open output file \'" << lOutName.c_str() << "\'." << endl; return 1; } // emit review lOutput << "" << endl; lOutput << "" << endl; lOutput << "Review Paper#: " << lPaperId << endl; lOutput << "" << endl; lOutput << "" << endl; // review 1 lOutput << "

Review Paper#: " << lPaperId << "

" << endl; lOutput << "

Title: " << lPaperTitle[0] << "

" << endl; // review 1 lOutput << "Reviewer #1
" << endl; lOutput << "Score: " << lPaperScore[0] << "
" << endl; lOutput << "Reviewer's Confidence: " << lConfidence[0] << "
" << endl; lOutput << "

" << endl; lOutput << lReview[0] << endl; lOutput << "

" << endl; // review 2 lOutput << "Reviewer #2
" << endl; lOutput << "Score: " << lPaperScore[1] << "
" << endl; lOutput << "Reviewer's Confidence: " << lConfidence[1] << "
" << endl; lOutput << "

" << endl; lOutput << lReview[1] << endl; lOutput << "

" << endl; // review 3 lOutput << "Reviewer #3
" << endl; lOutput << "Score: " << lPaperScore[2] << "
" << endl; lOutput << "Reviewer's Confidence: " << lConfidence[2] << "
" << endl; lOutput << "

" << endl; lOutput << lReview[2] << endl; lOutput << "

" << endl; lOutput << "" << endl; lOutput << "" << endl; lOutput.close(); } else break; } lReader.close(); return 0; }