Разработка текстового фильтра-транслитератора
Передача одной письменности средствами другой письменности, конверсия систем письма. Проектирование пользовательского интерфейса. Разработка механизма транслитерации. Определение правильности перевода. Сопоставление символов кириллицы и латиницы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 17.05.2013 |
Размер файла | 24,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Содержание
Введение
1. Анализ задания
2. Проектирование пользовательского интерфейса
3. Разработка механизма транслитерации
4. Тестирование
Заключение
Литература
Приложение
ВВЕДЕНИЕ
Транслитерация -- передача одной письменности средствами другой письменности, конверсия систем письма, при которой каждый графический элемент (знак) одной системы письма представляется (заменяется) одним и тем же графическим элементом другой системы письма.
На практике транслитерация применяется ограниченно, большей частью в сфере формальной обработки данных (например, при составлении в единой письменности каталога библиотеки из книг на разных языках). Для воспроизведения же в русском тексте иностранных имен и названий предпочтение в большинстве случаев отдается так называемой практической транскрипции, учитывающей не только письменную форму исходных слов, но и их произношение, а также исторические соображения. В чистом виде транслитерация применяется для немногих языков: таковы, например, системы передачи кириллицей китайских и японских слов.
Транслитерация получила широкое распространение в SMS в эпоху нерусифицированных сотовых телефонов. Широко использутся вместо кириллицы при работе на нерусифицированных компьютерах. Очень небольшое количество программ и сайтов (например, Яндекс) предлагают виртуальную русскоязычную клавиатуру, которой удобно пользоваться только слепым методом.
Для решения задачи использовались возможности ассемблера для работы с файлами.
Задача позволяет продемонстрировать владение разработкой процедур ассемблера, работой с массивами данных и стеком.
1. АНАЛИЗ ЗАДАНИЯ
Текстовый фильтр-транслитератор. На входе - текстовый файл, на выходе - файл, в котором все русские символы заменены латиницей, символы табуляции - соответствующим количеством пробелов, псевдографика - соответствующими по начертанию текстовыми символами, прочие управляющие символы удалены.
Так как размеры входных данных могут иметь разный размер, то для обработки текста приходится использовать буфер, в который информация заносится по частям. После обработки данные заносятся в выходной файл и программа готова принять следующую порцию информации. Процесс продолжается, пока не будет достигнут конец файла. Таким образом достигается отсутствие ограничений на объемы входных данных.
При возникновении ошибок в работе программы следует выводить информацию на экран.
Необходимо предоставить пользователю возможность указывать местоположение исходного и выходного файлов.
Для работы с файловой системой ПК должны быть написаны процедуры с обработкой возникающих ошибок.
2. ПРОЕКТИРОВАНИЕ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА
При запуске программы пользователь должен указать в строке запуска команды 2 параметра: адрес входного и выходного текстовых файлов. Параметры вводятся через символ пробела. Если параметры не были введены или были введены ошибочно, то программа завершится с ошибкой. В случае отсутствия выходного файла, этот файл будет создан.
В ходе работы программы на экран выводятся сообщения, описывающие результат выполнения приложения.
В случае правильного выполнения программы на экран выводится сообщения о корректном завершении приложения. Если в ходе выполнения программы произошла ошибка, то на экран выведется сообщение, описывающее ошибку.
Программа транслитерирует все символы кириллицы, заменяет символы табуляции на соответствующее количество пробелов, псевдографические символы меняет на соответствующие текстовые символы. Остальные символы остаются неизменны.
Текст для транслитерации в файле input.txt должен записываться в кодировке CP866 - альтернативной кодировке DOS, так как в ней специфические европейские символы заменены на кириллицу и оставлены нетронутыми псевдографические символы. Эту запись можно производить либо в редакторах, работающих в режиме DOS, либо в текстовых редакторах Vim, Gvim, Notepad++.
3. РАЗРАБОТКА МЕХАНИЗМА ТРАНСЛИТЕРАЦИИ
Главными задачами при разработке программы были организация чтения данных из файла неизвестной длины и сопоставление символов кириллицы и соответствующих им символов латиницы.
Для решения первой проблемы было решено разбивать входной массив данных на части определенного размера и переводить эти части по отдельности друг от друга, пока не будет достигнут конец массива.
Для входных данных в памяти зарезервирован буфер размером 4 КБ. Если размеры входного текста больше размеров буфера, то сначала считаются и преобразуются первые 4КБ, затем следующие 4 КБ и так далее до полной обработки данных.
Так как некоторым символам кириллицы соответствует сочетание из двух латинских знаков, то для хранения выходных данных зарезервирован буфер размером 8 КБ, которого хватит для любых входных последовательностей.
Для сопоставления символов кириллицы и латиницы в программе организовано два массива. В первом хранятся символы, требующие замены в ходе транслитерации, во втором массиве хранятся их аналоги, причем индексы элементов совпадают. При обработке текущего символа в первом массиве ищется его индекс, после чего в выходной буфер из второго массива поступает элемент с соответствующим номером.
Символы, не требующие изменения, не записаны в данные массивы и записываются в выходной файл в прежнем состоянии.
В случае преждевременного заполнения выходного буфера, содержимое буфера будет выведено в файл, после чего заполнение буфера начнется с начала.
Для замены символов табуляции на соответствующее количество пробелов позиция символа табуляции делится на 4(количество пробелов, замещающих табуляцию). Полученное число инвертируется командой NEG, и мы получаем необходимое количество пробелов.
4. ТЕСТИРОВАНИЕ
Целью тестирования являлось определение эффективности и отказоустойчивости программы, ограничений на количество вводимой информации программы. Также необходимо было убедиться в правильности перевода русскоязычного текста в его транслитированный вид.
В ходе тестирования выяснилось, что программные ограничения на размер входного файла отутствуют, его размеры зависят только от возможностей ПК.
Для определения правильности перевода использовались текстовые файлы с художественными произведениями.
Для определения правильности перевода символов табуляции брались файлы, содержащие текст с символами табуляции.
В процессе тестирования воссоздавались ситуации запуска программы с отсутствующими параметрами командной строки, с неправильно введенными параметрами командной строки. Программа запускалась с отсутствующими входными и выходными файлами.
Во всех этих ситуациях программа завершалась корректно, с выводом соответствующих сообщений на экран.
ЗАКЛЮЧЕНИЕ
Целью работы являлось написание программы «фильтр-транслитератор текста».
В ходе работы были использованы возможности ассемблера по работе с файловой системой, создано удобное сопоставление символов алфавитов друг другу, был разработан алгоритм, позволяющий производить транслитерацию текста любой длины и сложности, написаны процедуры, реализующие ввод и вывод данных.
Созданная программа способна транслитерировать файлы любых размеров, содержащие текст из знаков кириллицы и псевдографики и находящиеся в любом каталоге ПК. Передача команд программе осуществлено посредством командой строки. Результаты работы выводятся на экран.
транслитерация перевод кириллица латиница
СПИСОК ЛИТЕРАТУРЫ
1. Юров В.И. Assembler. - СПб.: Питер, 2003. - 624 с.
2. Питер Абель. Ассемблер. Язык и программирование для IMB PC. - К.: Век+, М.: ЭНТРОП, К.: НТИ, 2003. - 736 с.
3. Чернов С.А. Ассемблер процессора Intel 8086. Программирование с использованием Borland Tasm: учебное пособие - М.: Издательство МЭИ, 2005. - 93 с.
ПРИЛОЖЕНИЕ
Листинг программы
;Хомик Кирилл
;16 вариант
.model small
.stack 100h
.data
input_file db 100 dup (6)
output_file db 100 dup (6)
russian dw 0,'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','ъ','ы','ь','э','ю','я','А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Ъ','Ы','Ь','Э','Ю','Я','¦','+','¦','¦','¬','¬','¦','¦','¬','-','-','-','¬','L','+','T','+','-','+','¦','¦','L','г','¦','T','¦','=','+','¦','¦','T','T','L','L','г','г','+','+','-','-'
english dw 0,'a','b','v','g','d','e','yo','zh','z','i','y','k','l','m','n','o','p','r','s','t','u','f','kh','ts','ch','sh','#','y','`','e','yu','ya','A','B','V','G','D','E','YO','Zh','Z','I','Y','K','L','M','N','O','P','R','S','T','U','F','Kh','Ts','Ch','Sh','#','Y','`','E','Yu','Ya','|','+','+','+','+','+','+','|','+','+','+','+','+','+','+','+','+','-','+','+','+','+','+','+','+','+','-','+','+','+','+','+','+','+','+','+','+','+','+','+'
shch_letter1 dw 'sh'
shch_letter2 dw 'ch'
big_shch_letter1 dw 'Sh'
big_shch_letter2 dw 'ch'
buffer_inp db 4000 dup (?)
buffer_out db 8000 dup (?)
input_buf_length dw 0
output_buf_length dw 0
handle_inp dw 0
handle_out dw 0
opening_error db 'Opening error'
reading_error db 'Reading error'
writing_error db 'Writing error'
zero_params db 'Enter parameteres'
not_enough db 'Not enough parameteres'
done_message db 'Done!'
.code
;----------------------------------------------------
;Процедура вывода сообщения
;в dx - начало строки
;в cx - длина строки
;----------------------------------------------------
set_video_mode proc
mov ah,0 ;установка видео режима
mov al,03h
int 10h
ret
set_video_mode endp
;----------------------------------------------------
;Процедура чтения параметров запуска программы
;----------------------------------------------------
read_params proc
push ax
push bx
push cx
push dx
mov bp, 80h
mov cl, ES:[bp] ;чтение длины введенных параметров
cmp cl, 0 ;вывести ошибку
jnz cont_read_params ;при нулевых параметрах
call set_video_mode ;установка видео режима
lea dx, zero_params
mov cx, 17
call print_message ;вывод сообщения об ошибке
call close_app
cont_read_params:
inc bp
mov di, 0
mov ch, 0
dec cx
read_outfile_name: ;чтение имены входного файла
inc di
inc bp
mov al, ES:[bp]
cmp al, 20h
jz input
mov input_file[di-1], al
cmp di, cx
jnz read_outfile_name
call set_video_mode ;если не введен второй параметр
lea dx, not_enough ;вывести сообщение
mov cx, 22
call print_message
call close_app
input: ;ввод имени выходного файла
mov input_file[di-1], 0
mov si, 0
read_inpfile_name:
inc di
inc si
inc bp
mov al, ES:[bp]
mov output_file[si-1], al
cmp di, cx
jnz read_inpfile_name
mov output_file[si], 0
pop dx
pop cx
pop bx
pop ax
ret
read_params endp
;----------------------------------------------------
;Процедура вывода сообщения
;в dx - начало строки
;в cx - длина строки
;----------------------------------------------------
print_message proc
mov ah,40h ;40-я функция 21-го прерывания
mov bx,1 ;Дескриптор устройства-Дисплей равен 1
int 21h ; Вывод строки на экран
ret
print_message endp
;----------------------------------------------------
;Процедура завершения приложения
;----------------------------------------------------
close_app proc
mov ax,4C00h
int 21h
ret
close_app endp
;----------------------------------------------------
;Процедура чтения из файла
;handle_inp -
;----------------------------------------------------
readfile proc
mov ah, 3fh
mov bx, handle_inp
mov cx, 4000
lea dx, buffer_inp
int 21h
jc exit_app_readfile ;в случае ошибки завершить приложение
jmp exit_proc_readfile
exit_app_readfile:
mov dx, offset reading_error
mov cx, 13
call print_message
call close_app ;вызов завершения приложения
exit_proc_readfile:
mov input_buf_length, ax
ret
readfile endp
;----------------------------------------------------
;Процедура записи данных в файл
;----------------------------------------------------
writefile proc ;
mov ah, 40h ;запись в файл из buffer_out
mov bx, handle_out ;
mov cx, output_buf_length ;
lea dx, buffer_out ;
int 21h ;
jc exit_app_writefile ;в случае ошибки завершить приложение
jmp exit_proc_writefile
exit_app_writefile:
mov dx, offset writing_error
mov cx, 13
call print_message
call close_app ;вызов завершения приложения
exit_proc_writefile:
ret
writefile endp
;----------------------------------------------------
;Процедура открытия файла, в dx должен находиться
;указатель на файл(lea dx, file), на выходе в ax будет handle
;----------------------------------------------------
openfile proc
mov ah, 3dh
mov al, 2
lea dx, input_file
int 21h ;открытие файла с исходными данными
jc exit_app_openfile
mov handle_inp, ax
mov ah, 41h
lea dx, output_file
int 21h ;удаление файла
jc exit_app_openfile
mov ah, 3Ch ;создание чистого файла
mov cx, 00
lea dx, output_file
int 21h
jc exit_app_openfile
mov handle_out, ax
jmp exit_proc_openfile
exit_app_openfile:
mov dx, offset opening_error
mov cx, 13
call print_message
call close_app
exit_proc_openfile:
ret
openfile endp
;----------------------------------------------------
;Вывод спец. символов
;----------------------------------------------------
special_symbols proc
shch:
cmp al, 0F9h
jnz shch_big
;вывод транслита буквы щ
mov ax, shch_letter1
mov buffer_out[di], ah
inc di
mov buffer_out[di], al
inc di
mov ax, shch_letter2
mov buffer_out[di], ah
inc di
mov buffer_out[di], al
inc di
jmp end_spec
shch_big:
cmp al, 0D9h
jnz tab
;вывод транслита буквы Щ
mov ax, big_shch_letter1
mov buffer_out[di], ah
inc di
mov buffer_out[di], al
inc di
mov ax, big_shch_letter2
mov buffer_out[di], ah
inc di
mov buffer_out[di], al
inc di
jmp end_spec
tab: ;вывод символа табуляции
cmp al, 09h
jnz print_unchanged
push ax
push bx
push cx
mov ax, dx
mov bl, 4
div bl
sub ah, 4
neg ah
mov ch, 0
mov cl, ah
print_spaces: ;вывод нужного количества пробелов
mov buffer_out[di], 20h
inc di
loop print_spaces
pop cx
pop bx
pop ax
print_unchanged: ;если символ не требует замены, вывести его же
mov buffer_out[di], al
inc di
end_spec:
ret
special_symbols endp
;----------------------------------------------------
;Тело программы
;----------------------------------------------------
start:
mov ax, @data
mov ds, ax
call read_params
call set_video_mode
call openfile ;открытие файлов
reading:
call readfile ;чтение данных из файла(макс 4КБ)
mov si, 0 ;обнуление указателя si
mov di, 0
loading_next_symbol:
push di
mov ah, 0
mov al, buffer_inp[si] ;загрузка SI-го элемента в ax
inc si
cmp al, 0Ah
jnz not_new_str ;сбросить счетчик позиции табуляций
mov dx, 0 ;в начале новой строки
not_new_str:
inc dx ;если же нет новой строки, то inc
;mov cx, 222
mov cx, 210
comparing:
mov di, cx
mov bx, russian[di]
cmp ax, russian[di]
jz writing_analog
dec cx
loop comparing
pop di
call special_symbols
jmp print_exit
writing_analog:
mov ax, english[di] ;помещение в ax аналога русского символа
pop di
cmp ah, 0 ;проверка на размер символа транслита
jnz not_one_byte
mov buffer_out[di], al
inc di
jmp print_exit
not_one_byte:
;mov ax, si
mov buffer_out[di], ah
inc di
mov buffer_out[di], al
inc di
print_exit:
cmp di, 7996
jnb output_to_file
cmp si, input_buf_length ;повторять, пока не переведен весь буффер
jnz loading_next_symbol
output_to_file:
mov output_buf_length, di
call writefile
cmp si, input_buf_length ;если переведен не весь входной буфер,
jnz loading_next_symbol ;продолжить переводить
cmp input_buf_length, 4000
jz reading ;если прочтен не весь файл, то читать снова
exit_change:
mov dx, offset done_message
mov cx, 5
call print_message
call close_app
end start
Размещено на Allbest.ru
Подобные документы
Обзор мобильной ОС Android. Выбор инструментов и технологий. Проектирование прототипа графического интерфейса. Характеристика и описание пользовательского интерфейса. Проектирование и разработка базы данных. Определение списка необходимых разрешений.
курсовая работа [376,6 K], добавлен 13.09.2017Создание программного модуля, выполненного на языке программирования VBA (Visual Basic for Applications) и позволяющего во введенном массиве символов удалить все повторные вхождения этих символов. Разработка пользовательского интерфейса. Код программы.
курсовая работа [317,4 K], добавлен 11.10.2012Построение информационно-логической модели базы данных. Корректировка данных средствами запросов. Проектирование алгоритмов обработки данных. Реализация пользовательского интерфейса средствами форм. Разработка запросов для корректировки и выборки данных.
курсовая работа [680,9 K], добавлен 19.10.2010Разработка "Web-браузера". Программное средство для просмотра web-сайтов, их обработки, вывода и перехода от одной страницы к другой. Проектирование программы и ее интерфейса, разработка алгоритма. Тестирование программы и анализ проведенных расчетов.
курсовая работа [17,7 M], добавлен 19.12.2010Выделение сущностей базы данных и связей между ними. Организация ее объектов. Логическая и физическая модель БД. Определение требований к информационной системе. Проектирование транзакций и пользовательского интерфейса. Разработка отчетов и запросов.
курсовая работа [2,4 M], добавлен 17.10.2014Определение оптимального пути между контактными площадками. Возможность построения графического изображения поля трассировки. Разработка математической модели системы. Принцип волнового алгоритма. Проектирование пользовательского интерфейса, его схема.
контрольная работа [371,1 K], добавлен 19.01.2013Разработка программного модуля, программного обеспечения для компьютерных систем средствами C++ Builder. Разработка карты и интерфейса сайта. Алгоритмы реализации интерактивных функций программы. Пропускная способность линии связи. Программный код сайта.
отчет по практике [1,2 M], добавлен 16.09.2012Разработка объектно-ориентированной модели ООО "Мир Компьютеров". Описание предметной области. Разработка функциональной модели системы средствами BPwin. Проектирование информационной системы средствами Rational Rose. Сопровождение информационных сетей.
курсовая работа [843,4 K], добавлен 07.01.2015Разработка интерфейса и программного обеспечения виртуальной библиотеки. Проектирование структуры экранов и навигационной системы. Построение прототипа пользовательского интерфейса. Тестирование и модификация прототипа. Экспертная оценка разработки.
курсовая работа [41,2 K], добавлен 19.12.2010Краткое описание этапов разработки программного продукта. Анализ поставленных задач и определение основных функций программы. Разработка пользовательского интерфейса. Составление программной документации. Техническое задание на разработку проекта.
дипломная работа [1,5 M], добавлен 06.04.2013