Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2010, 19:31   #1
4айник
 
Регистрация: 17.03.2010
Сообщений: 5
По умолчанию Определить кодировки файлов в текущей директории

получил задание лабораторной написать программу ,определяющую кодировку файлов в текущей директории на ассемблере(nasm).помогите кто чем может,пожалуйста!!!
Вообще не представляю как писать, с чего начинать.
4айник вне форума Ответить с цитированием
Старый 17.03.2010, 22:57   #2
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

частота появления символов например
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 18.03.2010, 05:18   #3
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

airyashov
может быть и Unicode, если файлы *.html или *.htm то кодировка может быть задана явно
4айник
если файлы *.txt и известно что они на русском языке, то нужно найти символы с кодами от 0x80 до 0xFF (это отсеет знаки препинания, пробела, цифры и буквы латиницы), если у большинства оставшихся символов коды от 0x80 до 0xAF и от 0xE0 до 0xEF это кодировка cp866 (DOS-кодировка) если у большинства оставшихся символов коды от 0xС0 до 0xFF это кодировка cp1251 (Windows-кодировка)
Mikl___ вне форума Ответить с цитированием
Старый 11.04.2010, 15:38   #4
4айник
 
Регистрация: 17.03.2010
Сообщений: 5
По умолчанию

вообще файлы текстовые ,надо определить досовскоя(ср866) и юникс-кодировка(KOI-8) кодировки.

с алгоритмом ситуация прояснилась:разрешили определить кодировку по трем выбранным мною символам (допустим 'а','о' и 'б').еще можно выбрать директорию содержащую только текстовые файлы(нет подкаталогов и других файлов).
если кто может помогоите (может хоть кусок кода) пойдет даже не Асе из под Винды(тогда сам попробую на линухе сам что-то придумать),а очень буду благодарен тому,кто что-то из под линуха напишет.Литературы ноль,лекции через жопу.
4айник вне форума Ответить с цитированием
Старый 12.04.2010, 06:48   #5
Mikl___
Участник клуба
 
Регистрация: 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.
Про "определить кодировку по трем выбранным мною символам (допустим 'а','о' и 'б')" вообще полная чушь, откуда ты можешь знать что в твоем случайно выбранном файле будут такие буквы? Напиши задачу на любом языке, который знаешь (бейсик, паскаль, С) поймешь -- как всё работает, тогда и перепишешь на ассемблер
Mikl___ вне форума Ответить с цитированием
Старый 26.04.2010, 22:43   #6
4айник
 
Регистрация: 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-ом.
4айник вне форума Ответить с цитированием
Старый 27.04.2010, 15:49   #7
Mikl___
Участник клуба
 
Регистрация: 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 не обязательно русские буквы, на письме могут попадаться символы псевдографики (элементы таблиц, стрелочки, символ "№" и т.д.) тебе нужно определить что большинство укладываются в твой диапазон
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
список файлов в 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