ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 июля
637365 Топик полностью
Николай Коровин (10.12.2015 17:40 - 19:43, просмотров: 100) ответил MBedder на "Будь проще - и за тобой потянутся люди"(с) :))
Куда уж проще-то? %) UPD: собрал всё вместе. Делаем рас. Сохраняем все файлы в смеси кодировок DOS/WIN, чем они и являются. Не, допустим, в юникоде, в котором присутствуют и те кракозябры, и те, а именно в досвиндосе — натурально, на бинарном уровне. Если верить дополнительной информации — они уже такие и есть. Делаем два. Проверяем себя: принудительно смотрим вьюером (типа F3 в Коммандере в чисто текстовом режиме), переключаем DOS/Win, убеждаемся, что видим то то, то это. Значит, правильно сохранили. Делаем три. Пропускаем через статистический парсер. Если он в паре строк и ошибётся — работы уже раз этак в 100500 меньше. #include <fstream.h> static unsigned char Conv1[128]={192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 45, 45, 45, 166, 43, 166, 166, 172, 172, 166, 166, 172, 45, 45, 45, 172, 76, 43, 84, 43, 45, 43, 166, 166, 76, 227, 166, 84, 166, 61, 43, 166, 166, 84, 84, 76, 76, 45, 227, 43, 43, 45, 45, 45, 45, 166, 166, 45, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 168, 184, 170, 186, 175, 191, 161, 162, 176, 149, 183, 118, 185, 164, 166, 160 }; static unsigned char Conv2[128]={63, 63, 39, 63, 34, 58, 197, 216, 63, 37, 63, 60, 63, 63, 63, 63, 63, 39, 39, 34, 34, 7, 45, 45, 63, 84, 63, 62, 63, 63, 63, 63, 255, 246, 247, 63, 253, 63, 179, 21, 240, 99, 242, 60, 191, 45, 82, 244, 248, 43, 73, 105, 63, 231, 20, 250, 241, 252, 243, 62, 63, 63, 63, 245, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239 }; void main (int argc, char *argv[]) { static char Line[65536], *P; fstream in, out; int DOSvsWIN; if (argc!=3) return; in.open (argv[1]); out.open (argv[2]); for (;;) { in.getline (Line, 65536); if (in.fail()) break; DOSvsWIN=0; for (P=Line; *P; P++) //DOS: 0x80 to 0xAF, 0xE0 to 0xF1; WIN: 0xC0 to 0xFF. { if (*P<0x80 ) continue; //You can bypass until // or /* as well if (*P>0xF1 ) DOSvsWIN-=10; //Very probably Win else if (*P>0xC0 && *P<0xE0) DOSvsWIN-=10; //Very probably Win else if (*P<0xAF ) DOSvsWIN+=10; //Very probably DOS else { if (*P>0xE0 && *P<0xFF && P[1]>0xC0 && P[1]<0xDF) DOSvsWIN+=1; //probably not Win if (*P>0xA0 && *P<0xEF && P[1]>0x80 && P[1]<0x9F) DOSvsWIN-=1; //probably not DOS } } if (DOSvsWIN > 0) for (P=Line; *P; P++) if (*P>0x80) *P=Conv1[*P-0x80]; //All DOS to WIN, Win intact // if (DOSvsWIN < 0) for (P=Line; *P; P++) if (*P>0x80) *P=Conv2[*P-0x80]; //All Win to DOS, DOS intact out<<Line<<endl; } in.close(); out.close(); } Делаем четыре: с удовольствием бы посмотрел, какие строки его обманут и сколько их будет. Так, для собственного развития.