#include using namespace std; int config[2]; int config_read(); int content( int config ); int comment_cut( int config ); void ending( int sign ); int main() { int flag; flag = config_read(); if (flag) ending( flag ); if ( config[0] != 3 )flag = content( config[0] ); if ( !flag && config[1] != 7 ) flag = comment_cut( config[1] ); ending( flag ); return flag; } int config_read() { ifstream fin; char ss[3]; fin.open( "config.ini", ios::in | ios::binary ); if (!fin) return 1; fin.getline( ss, 3 ); config[0] = atoi( ss ); fin.getline( ss, 3 ); config[1] = atoi( ss ); fin.close(); /* config 0 スペース 1 タブ 2 スペース+タブ 3 なし 4 コメント 5 改行 6 コメント+改行 7 なし */ return 0; } int content( int config ) { ifstream fin; ofstream fout; char readbuf[200000], writebuf[200000]; int i, j, filesize, readnum, writenum, flag = 0; fin.open( "abcx0_", ios::in | ios::binary ); if (!fin) return 1; fout.open( "abcx1_", ios::out | ios::trunc | ios::binary ); if (!fout) { fin.close(); return 1; } fin.seekg( 0, ios::end ); filesize = fin.tellg(); fin.seekg( 0, ios::beg ); j = filesize / 200000; switch(config) { case 0: for (i=0; i' ) header ++; break; case 6: if ( readbuf[readnum] == 13 || readbuf[readnum] == 10 ) { if ( readbuf[readnum] == 13 && readbuf[readnum+1] == 10 ) { readnum ++; writebuf[writenum] = readbuf[readnum]; writenum ++; } header = 100; } } continue; } switch(flag) { case 0: if ( readbuf[readnum] == '<' ) flag = 1; break; case 1: if ( readbuf[readnum] == '!' ) flag = 2; else { writebuf[writenum] = '<'; writenum ++; flag = 0; } break; case 2: if ( readbuf[readnum] == '-' ) flag = 3; else { writebuf[writenum] = '<'; writenum ++; writebuf[writenum] = '!'; writenum ++; flag = 0; } break; case 3: if ( readbuf[readnum] == '-' ) flag = 4; else { writebuf[writenum] = '<'; writenum ++; writebuf[writenum] = '!'; writenum ++; writebuf[writenum] = '-'; writenum ++; flag = 0; } break; case 4: if ( readbuf[readnum] == '-' ) flag = 5; break; case 5: if ( readbuf[readnum] == '-' ) flag = 6; else flag = 4; break; case 6: if ( readbuf[readnum] == '>' ) flag = 7; else if ( readbuf[readnum] != '-' ) flag = 4; } if ( flag == 0 ) { writebuf[writenum] = readbuf[readnum]; writenum ++; } if ( flag == 7 ) flag = 0; } if ( writenum ) fout.write( writebuf, writenum ); if ( fin.fail() && !fin.bad() ) fin.clear(); } i = filesize - ( 200000 * j ); if (i) { writenum = 0; fin.read( readbuf, i ); for (readnum=0; readnum' ) header ++; break; case 6: if ( readbuf[readnum] == 13 || readbuf[readnum] == 10 ) { if ( readbuf[readnum] == 13 && readbuf[readnum+1] == 10 ) { readnum ++; writebuf[writenum] = readbuf[readnum]; writenum ++; } header = 100; } } continue; } switch(flag) { case 0: if ( readbuf[readnum] == '<' ) flag = 1; break; case 1: if ( readbuf[readnum] == '!' ) flag = 2; else { writebuf[writenum] = '<'; writenum ++; flag = 0; } break; case 2: if ( readbuf[readnum] == '-' ) flag = 3; else { writebuf[writenum] = '<'; writenum ++; writebuf[writenum] = '!'; writenum ++; flag = 0; } break; case 3: if ( readbuf[readnum] == '-' ) flag = 4; else { writebuf[writenum] = '<'; writenum ++; writebuf[writenum] = '!'; writenum ++; writebuf[writenum] = '-'; writenum ++; flag = 0; } break; case 4: if ( readbuf[readnum] == '-' ) flag = 5; break; case 5: if ( readbuf[readnum] == '-' ) flag = 6; else flag = 4; break; case 6: if ( readbuf[readnum] == '>' ) flag = 7; else if ( readbuf[readnum] != '-' ) flag = 4; } if ( flag == 0 ) { writebuf[writenum] = readbuf[readnum]; writenum ++; } if ( flag == 7 ) flag = 0; } if ( writenum ) fout.write( writebuf, writenum ); } break; case 5: for (i=0; i' ) header ++; break; case 6: if ( readbuf[readnum] == 13 || readbuf[readnum] == 10 ) { if ( readbuf[readnum] == 13 && readbuf[readnum+1] == 10 ) { readnum ++; writebuf[writenum] = readbuf[readnum]; writenum ++; } header = 100; } } continue; } if ( readbuf[readnum] != 13 && readbuf[readnum] != 10 ) { writebuf[writenum] = readbuf[readnum]; writenum ++; lf ++; } else if ( lf <= 300 ) { if ( readbuf[readnum] == 13 ) readnum ++; if ( readbuf[readnum] != 10 ) readnum --; } else { if ( readbuf[readnum] == 13 ) { writebuf[writenum] = readbuf[readnum]; writenum ++; readnum ++; } if ( readnum >= 200000 ) break; if ( readbuf[readnum] == 10 ) { writebuf[writenum] = readbuf[readnum]; writenum ++; } else readnum --; lf = 0; } } if ( writenum ) fout.write( writebuf, writenum ); if ( fin.fail() && !fin.bad() ) fin.clear(); } i = filesize - ( 200000 * j ); if (i) { writenum = 0; fin.read( readbuf, i ); for (readnum=0; readnum' ) header ++; break; case 6: if ( readbuf[readnum] == 13 || readbuf[readnum] == 10 ) { if ( readbuf[readnum] == 13 && readbuf[readnum+1] == 10 ) { readnum ++; writebuf[writenum] = readbuf[readnum]; writenum ++; } header = 100; } } continue; } if ( readbuf[readnum] != 13 && readbuf[readnum] != 10 ) { writebuf[writenum] = readbuf[readnum]; writenum ++; lf ++; } else if ( lf <= 300 ) { if ( readbuf[readnum] == 13 ) readnum ++; if ( readbuf[readnum] != 10 ) readnum --; } else { if ( readbuf[readnum] == 13 ) { writebuf[writenum] = readbuf[readnum]; writenum ++; readnum ++; } if ( readbuf[readnum] == 10 ) { writebuf[writenum] = readbuf[readnum]; writenum ++; } else readnum --; lf = 0; } } if ( writenum ) fout.write( writebuf, writenum ); } break; case 6: for (i=0; i' ) header ++; break; case 6: if ( readbuf[readnum] == 13 || readbuf[readnum] == 10 ) { if ( readbuf[readnum] == 13 && readbuf[readnum+1] == 10 ) { readnum ++; writebuf[writenum] = readbuf[readnum]; writenum ++; } header = 100; } } continue; } switch(flag) { case 0: if ( readbuf[readnum] == '<' ) flag = 1; break; case 1: if ( readbuf[readnum] == '!' ) flag = 2; else { writebuf[writenum] = '<'; writenum ++; flag = 0; } break; case 2: if ( readbuf[readnum] == '-' ) flag = 3; else { writebuf[writenum] = '<'; writenum ++; writebuf[writenum] = '!'; writenum ++; flag = 0; } break; case 3: if ( readbuf[readnum] == '-' ) flag = 4; else { writebuf[writenum] = '<'; writenum ++; writebuf[writenum] = '!'; writenum ++; writebuf[writenum] = '-'; writenum ++; flag = 0; } break; case 4: if ( readbuf[readnum] == '-' ) flag = 5; break; case 5: if ( readbuf[readnum] == '-' ) flag = 6; else flag = 4; break; case 6: if ( readbuf[readnum] == '>' ) flag = 7; else if ( readbuf[readnum] != '-' ) flag = 4; } if ( flag == 0 ) { if ( readbuf[readnum] != 13 && readbuf[readnum] != 10 ) { writebuf[writenum] = readbuf[readnum]; writenum ++; lf ++; } else if ( lf <= 300 ) { if ( readbuf[readnum] == 13 ) readnum ++; if ( readbuf[readnum] != 10 ) readnum --; } else { if ( readbuf[readnum] == 13 ) { writebuf[writenum] = readbuf[readnum]; writenum ++; readnum ++; } if ( readnum >= 200000 ) break; if ( readbuf[readnum] == 10 ) { writebuf[writenum] = readbuf[readnum]; writenum ++; } else readnum --; lf = 0; } } if ( flag == 7 ) flag = 0; } if ( writenum ) fout.write( writebuf, writenum ); if ( fin.fail() && !fin.bad() ) fin.clear(); } i = filesize - ( 200000 * j ); if (i) { writenum = 0; fin.read( readbuf, i ); for (readnum=0; readnum' ) header ++; break; case 6: if ( readbuf[readnum] == 13 || readbuf[readnum] == 10 ) { if ( readbuf[readnum] == 13 && readbuf[readnum+1] == 10 ) { readnum ++; writebuf[writenum] = readbuf[readnum]; writenum ++; } header = 100; } } continue; } switch(flag) { case 0: if ( readbuf[readnum] == '<' ) flag = 1; break; case 1: if ( readbuf[readnum] == '!' ) flag = 2; else { writebuf[writenum] = '<'; writenum ++; flag = 0; } break; case 2: if ( readbuf[readnum] == '-' ) flag = 3; else { writebuf[writenum] = '<'; writenum ++; writebuf[writenum] = '!'; writenum ++; flag = 0; } break; case 3: if ( readbuf[readnum] == '-' ) flag = 4; else { writebuf[writenum] = '<'; writenum ++; writebuf[writenum] = '!'; writenum ++; writebuf[writenum] = '-'; writenum ++; flag = 0; } break; case 4: if ( readbuf[readnum] == '-' ) flag = 5; break; case 5: if ( readbuf[readnum] == '-' ) flag = 6; else flag = 4; break; case 6: if ( readbuf[readnum] == '>' ) flag = 7; else if ( readbuf[readnum] != '-' ) flag = 4; } if ( flag == 0 ) { if ( readbuf[readnum] != 13 && readbuf[readnum] != 10 ) { writebuf[writenum] = readbuf[readnum]; writenum ++; lf ++; } else if ( lf <= 300 ) { if ( readbuf[readnum] == 13 ) readnum ++; if ( readbuf[readnum] != 10 ) readnum --; } else { if ( readbuf[readnum] == 13 ) { writebuf[writenum] = readbuf[readnum]; writenum ++; readnum ++; } if ( readbuf[readnum] == 10 ) { writebuf[writenum] = readbuf[readnum]; writenum ++; } else readnum --; lf = 0; } } if ( flag == 7 ) flag = 0; } if ( writenum ) fout.write( writebuf, writenum ); } } fin.close(); fout.close(); return 0; } void ending( int sign ) { ofstream fout; char ch; ch = sign + 48; fout.open( "eflag.ini", ios::out | ios::trunc | ios::binary ); fout << ch; fout.close(); }