![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 17.03.2010
Сообщений: 5
|
![]()
получил задание лабораторной написать программу ,определяющую кодировку файлов в текущей директории на ассемблере(nasm).помогите кто чем может,пожалуйста!!!
Вообще не представляю как писать, с чего начинать. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 02.04.2008
Сообщений: 358
|
![]()
частота появления символов например
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666 mail: airyashov(а)inbox.ru |
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
airyashov
может быть и Unicode, если файлы *.html или *.htm то кодировка может быть задана явно 4айник если файлы *.txt и известно что они на русском языке, то нужно найти символы с кодами от 0x80 до 0xFF (это отсеет знаки препинания, пробела, цифры и буквы латиницы), если у большинства оставшихся символов коды от 0x80 до 0xAF и от 0xE0 до 0xEF это кодировка cp866 (DOS-кодировка) если у большинства оставшихся символов коды от 0xС0 до 0xFF это кодировка cp1251 (Windows-кодировка) |
![]() |
![]() |
![]() |
#4 |
Регистрация: 17.03.2010
Сообщений: 5
|
![]()
вообще файлы текстовые ,надо определить досовскоя(ср866) и юникс-кодировка(KOI-8) кодировки.
с алгоритмом ситуация прояснилась:разрешили определить кодировку по трем выбранным мною символам (допустим 'а','о' и 'б').еще можно выбрать директорию содержащую только текстовые файлы(нет подкаталогов и других файлов). если кто может помогоите (может хоть кусок кода) пойдет даже не Асе из под Винды(тогда сам попробую на линухе сам что-то придумать),а очень буду благодарен тому,кто что-то из под линуха напишет.Литературы ноль,лекции через жопу. |
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
4айник
Я ж тебе уже написал, смотришь расширение файла, если файлы *.txt и первые два символа имеют кодировку 0xFE 0xFF значит кодировка Unicode (двухбайтовая) если нет и мы точно знаем что файлы на русском языке, то либо cp866 (DOS), либо cp1251 (Windows-кодировка) выбираешь 100 первых символов с кодировкой от 0x80 до 0xFF если большинство из них имеет кодировку от 0x80 до 0xAF и от 0xE0 до 0xEF -- это кодировка cp866, если у большинства символов коды от 0xС0 до 0xFF это кодировка cp1251. Про "определить кодировку по трем выбранным мною символам (допустим 'а','о' и 'б')" вообще полная чушь, откуда ты можешь знать что в твоем случайно выбранном файле будут такие буквы? Напиши задачу на любом языке, который знаешь (бейсик, паскаль, С) поймешь -- как всё работает, тогда и перепишешь на ассемблер |
![]() |
![]() |
![]() |
#6 |
Регистрация: 17.03.2010
Сообщений: 5
|
![]()
написал код на С.работал на окнах из под линя не работает.писал все используя read write open close для последующего дизассемблирования.
#include <stdio.h> int main() { unsigned char *simvol; int file; int ascii_kod=0,i=0,j=0,fl_KOI8=0,fl_CP 866=0,n; unsigned char ms[100]={0}; char* ERROR_MESSAGE="fail ne soderzhit simvolov kirillicy"; file=open("kodddddd.txt",0); if(file==-1) { write(1,"Ne mogu otkryt fail",19); return -1; } while(i<100) { if((n=read(file,simvol,1))!=0) { if(n==-1) {write(1,"oshibka chteniya faila",22);return -1;} ascii_kod=*simvol; if((ascii_kod>=128)&&(ascii_kod<=25 5)) { ms[i]=*simvol; i++; } } else goto start; } start: for(j=0;j<i;j++) { ascii_kod=ms[j]; if((ascii_kod>=192)&&(ascii_kod<=25 5)) fl_KOI8++; if(((ascii_kod>=128)&&(ascii_kod<=1 75))||((ascii_kod>=224)&&(ascii_kod <=239))) fl_CP866++; } if(i==0) write(1,ERROR_MESSAGE,36); else { if(fl_KOI8==i) write(1,"KOI8 kodirovka",14); if(fl_CP866==i) write(1,"CP866 kodirovka",15); } close(file); return 1; } ЗЫ если кто может помогите с получением имён файлов в текущей директории(сказали юзать getdents или readdir)с readdir-ом понятно хотелось бы разобраться с getdents-ом. |
![]() |
![]() |
![]() |
#7 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
4айник
Небольшие замечания 1) вместо if((ascii_kod>=128)&&(ascii_kod<=25 5)) достаточно писать if(ascii_kod>=128) так как unsigned char не может быть больше 255 2) часть символов у которых ascii_kod>=128 не обязательно русские буквы, на письме могут попадаться символы псевдографики (элементы таблиц, стрелочки, символ "№" и т.д.) тебе нужно определить что большинство укладываются в твой диапазон |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
список файлов в web директории | Serega_P | Общие вопросы Delphi | 3 | 11.06.2009 11:15 |
Программа получения списка файлов директории и изменения атрибутов файлов | roma86 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 7 | 09.06.2009 09:08 |
определить номер текущей строки в synmemo | LAGOX | Компоненты Delphi | 1 | 21.04.2009 01:25 |
Определение текущей директории | Alex Cones | Мультимедиа в Delphi | 4 | 11.04.2009 12:32 |
Программа просмотра файлов в директории | asale | Microsoft Office Excel | 4 | 06.01.2009 13:53 |