Программа для перевода текстов с транслита
Федеральное агентство по образованию Российской Федерации.
Южно-Уральский Государственный Университет.
Кафедра «Информационно – аналитическое обеспечение управления в социальных и экономических системах»
Курсовая работа по дисциплине Программирование на языке высокого уровня
«Программа для перевода текстов с транслита»
Выполнил:
Студент группы ПC-ххх
_______ Студент
“___” ____________ 2005
Проверил:
_______ Препод
“___”____________2005
Челябинск
2005
План
Описание применения
1. Постановка задачи
2. Актуальность задачи
3. Метод решения
4. Входные и выходные данные
Описание программы
1. Общие данные и типы.
2. Список процедур и функций
3. Структура программы.
4. Главная форма
5. Форма «Редактор алфавита»
6. Форма «О программе»
7. Основные алгоритмы
8. Работа с программой, входные и выходные данные
9. Описание тестовых заданий
Приложение
Описание применения
Постановка задачи
Программа для перевода текстов с транслита на русский и обратно. Поддерживается форматирование текста, наиболее популярные системы транслитерации ГОСТ 16876-71, русско-английскую, а также таблицы, задаваемые пользователем. Программа должна иметь функцию перевода символов текста к верхнему и нижнему регистру, функцию подсчета количества символов в тексте. Загрузка текста из буфера обмена может осуществляться по быстрой кнопке.
Актуальность задачи
Перевод текста из кириллицы в транслит используется очень часто. От простейшего создания nickname до разговоров в IRC-каналах. Многие программы не поддерживают кириллицу и приходится вводить какие-либо комментарии на транслите. Также некоторые mp3-плееры не поддерживают кириллицу и теги приходится писать также на транслите. Этот способ кодировки русских букв давно устоялся и есть чёткие правила (хотя есть и варианты) набора букв. Поэтому в данной программе необходимо реализовать загрузки словаря.
Метод решения
Так как программа должна иметь графический и интуитивно понятный интерфейс, то для решения очень подходит DELPHI. Была выбрана версия 7.0. Вся программа была разбита на 3 формы: главная, форма работы со словарями и форма «О программе». Весь интерфейс был разработан на стандартных компонентах и обработчиках событий.
Входные и выходные данные
Входные и выходные параметры могут быть двух типов: словарь и текст для перевода. Словарь – типизированный файл (shortstring). Возможно сохранение и загрузка словаря. Текст – обычный текстовый файл на кириллице или транслите (возможен перевод в обе стороны). Результат также можно сохранять в текстовый файл. Также текст можно вводить с клавиатуры в соответствующие текстовые поля.
Описание программы
Общие данные и типы
Алфавит перевода представляет из себя массив переменных типа shortstring с индексами от «А» до «Я». Элементами массива являются символы в транслите соответствующей букве в кириллице.
Array [‘А’..‘Я’] of shortstring.
Также создано множество больших и маленьких букв кириллицы:
al_set : set of char = ['А'..'Я','Й','Ё'];
small_al : set of char = ['а'..'я','й','ё'];
Список процедур и функций
Функция UpCase_R(const ch_in:char):char возвращает символ в верхнем регистре:
Листинг 1. Функция UpCase_R
function UpCase_R(const ch_in:char):char;
var
res:char;
begin
case ch_in of //проверяет является ли параметр ch_in русской буквой и если да
'й': res:= 'Й'; //то заменяет её на аналогичную, но в верхнем регистре.
'ц': res:= 'Ц';
'у': res:= 'У';
'к': res:= 'К';
'е': res:= 'Е';
'н': res:= 'Н';
'г': res:= 'Г';
'ш': res:= 'Ш';
'щ': res:= 'Щ';
'з': res:= 'З';
'х': res:= 'Х';
'ъ': res:= 'Ъ';
'ф': res:= 'Ф';
'ы': res:= 'Ы';
'в': res:= 'В';
'а': res:= 'А';
'п': res:= 'П';
'р': res:= 'Р';
'о': res:= 'О';
'л': res:= 'Л';
'д': res:= 'Д';
'ж': res:= 'Ж';
'э': res:= 'Э';
'я': res:= 'Я';
'ч': res:= 'Ч';
'с': res:= 'С';
'м': res:= 'М';
'и': res:= 'И';
'т': res:= 'Т';
'ь': res:= 'Ь';
'б': res:= 'Б';
'ю': res:= 'Ю';
'ё': res:= 'Ё';
else
begin
if not(ch_in in al_set) then
res:= UpCase(ch_in)
else
res:= ch_in;
end;
end;
UpCase_R:= res;
end;
Функция downcase (const ch_in:char):char возвращает символ в нижнем регистре:
Листинг 2. Функция downcase.
function downcase(ch_in:char):char;
var
res:char;
Begin
case ch_in of // проверяет является ли параметр ch_in русской или латинской
'Й': res:= 'й'; // буквой и если да, то возвращает соответствующую букву
'Ц': res:= 'ц'; // но в верхнем регистре.
'У': res:= 'у';
'К': res:= 'к';
'Е': res:= 'е';
'Н': res:= 'н';
'Г': res:= 'г';
'Ш': res:= 'ш';
'Щ': res:= 'щ';
'З': res:= 'з';
'Х': res:= 'х';
'Ъ': res:= 'ъ';
'Ф': res:= 'ф';
'Ы': res:= 'ы';
'В': res:= 'в';
'А': res:= 'а';
'П': res:= 'п';
'Р': res:= 'р';
'О': res:= 'о';
'Л': res:= 'л';
'Д': res:= 'д';
'Ж': res:= 'ж';
'Э': res:= 'э';
'Я': res:= 'я';
'Ч': res:= 'ч';
'С': res:= 'с';
'М': res:= 'м';
'И': res:= 'и';
'Т': res:= 'т';
'Ь': res:= 'ь';
'Б': res:= 'б';
'Ю': res:= 'ю';
'Ё': res:= 'ё';
'Q': res:= 'q';
'W': res:= 'w';
'E': res:= 'e';
'R': res:= 'r';
'T': res:= 't';
'Y': res:= 'y';
'U': res:= 'u';
'I': res:= 'i';
'O': res:= 'o';
'P': res:= 'p';
'A': res:= 'a';
'S': res:= 's';
'D': res:= 'd';
'F': res:= 'f';
'G': res:= 'g';
'H': res:= 'h';
'J': res:= 'j';
'K': res:= 'k';
'L': res:= 'l';
'Z': res:= 'z';
'X': res:= 'x';
'C': res:= 'c';
'V': res:= 'v';
'B': res:= 'b';
'N': res:= 'n';
'M': res:= 'm';
else
res:= ch_in;
end;
Downcase:= res;
End;
Структура программы
Программа состоит из трех частей:
Главной формы (модуль unit_main)
Рис 1. Главная форма
Формы «О программе» (модуль unit_about)
рис 2. Форма «О программе»
Формы работы со словарями (модуль unit_slov)
рис 3. Форма «Редактор алфавита»
Главная форма загружается автоматически и другие формы вызываются из нее. При выборе меню «Перевод -> Редактор алфавита» вызывается форма работы с алфавитом, а при выборе «Справка -> О программе» вызывается форма «О программе».
Главная форма
Предназначена для загрузки, сохранения, редактирования и перевода текстов.
Содержит следующие компоненты:
TMemo – 2шт
TPanel – 2 шт.;
TMainMenu;
TStatusBar;
TLabel – 4 шт.
TOpenDialog
TSaveDialog
TmainMenu
TimageList
TactionList
TtoolBar (ToolButton – 7 шт.)
Всё расположено так, как указано на рисунке 1.
Два TLabel указывают на направление перевода в полях, ещё два – на количество символов в областях ввода данных. Два диалога (TOpenDialog и TSaveDialog) для сохранения и загрузки исходного или итогового текста. TMemo для ввода (и отображения) текущих данных для перевода. TMainMenu для главного меню и кнопки (ToolButton) для управления программой (для управления полями ввода и словарём).
Главное меню основной формы:
Меню «Файл»
рис. 4. Главное меню. Пункт «Файл»
Меню «Правка»
рис. 5. Главное меню. Пункт «Правка»
Меню «Перевод»
рис. 6. Главное меню. Пункт «Перевод»
Меню «Справка»
рис. 7. Главное меню. Пункт «Справка»
Для каждого пункта меню используются клавиши быстрого доступа (свойство ShortCut) и пиктограммы(элементы ImageList). Обработка выбора каждого пункта меню производится в Action’ах компонента ActionList.
Обработчики событий главной формы:
При создании формы загружается стандартный ГОСТ’овский словарь перевода из кириллицы в транслит и обнуляется текст выводящий количество символов в полях.
Листинг 3. «Обработчик события создания главной формы»
procedure TMainForm.FormCreate(Sender: TObject);
begin
Count_1.Caption:= 'Символов: 0';
Count_2.Caption:= 'Символов: 0';
b_jo:= 'jo';
alph['А']:= 'a';
alph['Б']:= 'b';
alph['В']:= 'v';
alph['Г']:= 'g';
alph['Д']:= 'd';
alph['Е']:= 'e';
alph['Ж']:= 'zh';
alph['З']:= 'z';
alph['И']:= 'i';
alph['Й']:= 'jj';
alph['К']:= 'k';
alph['Л']:= 'l';
alph['М']:= 'm';
alph['Н']:= 'n';
alph['О']:= 'o';
alph['П']:= 'p';
alph['Р']:= 'r';
alph['С']:= 's';
alph['Т']:= 't';
alph['У']:= 'u';
alph['Ф']:= 'f';
alph['Х']:= 'kh';
alph['Ц']:= 'c';
alph['Ч']:= 'ch';
alph['Ш']:= 'sh';
alph['Щ']:= 'shh';
alph['Ъ']:= '''''';
alph['Ы']:= 'y';
alph['Ь']:= '''';
alph['Э']:= 'eh';
alph['Ю']:= 'ju';
alph['Я']:= 'ja';
end;
Обработчики событий для кнопок:
Кнопка (редактировать алфавит), событие acAlphEdit
Листинг 4. «Обработчик события нажатия на кнопку Редактировать алфавит»
procedure TMainForm.acAlphEditExecute(Sender: TObject);
begin
SlovarForm.show;
end;
Кнопка (Открыть фаил в окно кириллици) acCyrOpen
Выполняет диалог OpenDialog и загружает в поле memCyr содержимое файла используя при этом обработчик исключений.
Листинг 5. «Обработчик события нажатия на кнопку Открыть»
procedure TMainForm.acCyrOpenExecute(Sender: TObject);
begin
if openDialog.execute then
try
memCyr.lines.LoadFromFile(OpenDialog.FileName);
except
showmessage('Неверный формат фаила!!!');
end;
end;
Кнопка (Сохранить текст из окна кириллици) acSaveCyr
Выполняет диалог SaveDialog и сохраняет поле memCyr в файл.
Листинг 6. «Обработчик события нажатия на кнопку Сохранить»
procedure TMainForm.acSaveCyrExecute(Sender: TObject);
begin
if openDialog.execute then
memCyr.lines.SaveToFile(OpenDialog.FileName);
end;
Кнопка (перевести с кириллици в латиницу) acCyrToLat
Очищает поле memLat и заносит в него текст переведенный в транслит. Данный алгоритм будет рассмотрен в части «Основные алгоритмы»
Коды обработки событий нажатия кнопок сохранения и загрузки для memLat (поле ввода латиници) идентичны приведенным выша, за исключением входного и выходного полей (memLat)
Процедуры обработки событий главного меню:
Меню «Файл»
«Открыть фаил в окно кириллици»
acCyrOpen
«Открыть фаил в окно латиници»
acLatOpen
«Сохранить текст из окна кириллици»
acSaveCyr
«Сохранить текст из окна латиници»
acSaveLat
«Выход»
Закрывает главную форму.
Листинг 8. «Обработчик главного меню Файл -> Выход»
procedure TMainForm.N4Click(Sender: TObject);
begin
MainForm.Close;
end;
Меню «Правка»
Содержит стандартные функции управления буфером обмена и редактирования текста.
«Отменить CTRL+Z» acUndo
Отменяет изменения в текущем (активном) поле для ввода
Листинг 9. «Обработчик главного меню Правка -> Отменить»
procedure TMainForm. acUndoExecute(Sender: TObject);
begin
if memCyr.Focused then memCyr.Undo;
if memLat.Focused then memLat.Undo;
end;
«Вырезать CTRL+X» acCut
Вырезает выделенный текст в текущем (активном) поле для ввода.
Листинг 10. «Обработчик главного меню Правка -> Вырезать»
procedure TMainForm.acCutExecute(Sender: TObject);
begin
if memCyr.Focused then memCyr.CutToClipboard;
if memLat.Focused then memLat.CutToClipboard;
end;
«Копировать CTRL+С» acCopy
Копирует выделенный текст в текущем (активном) поле для ввода.
Листинг 11. «Обработчик главного меню Правка -> Копировать»
procedure TMainForm.acCopyExecute(Sender: TObject);
begin
if memCyr.Focused then memCyr.CopyToClipboard;
if memLat.Focused then memLat.CopyToClipboard;
end;
«Вставить CTRL+V» acPaste
Вставляет текст из буфера в текущее (активное) поле для ввода.
Листинг 12. «Обработчик главного меню Правка -> Вставить»
procedure TMainForm.acPasteExecute(Sender: TObject);
begin
if memCyr.Focused then memCyr.PasteFromClipboard;
if memLat.Focused then memLat.PasteFromClipboard;
end;
«Удалить CTRL+Del» acDelete
Удаляет выделенный текст из текущего (активного) поля для ввода.
Листинг 13. «Обработчик главного меню Правка -> Удалить»
procedure TMainForm.acDeleteExecute(Sender: TObject);
begin
if MemCyr.Focused then memCyr.ClearSelection;
if MemLat.Focused then memLat.ClearSelection;
end;
«Выделить всё CTRL+A»
Выделяет весь текст в текущем (активном) поле для ввода.
Листинг 14. «Обработчик главного меню Правка -> Выделить всё»
procedure TMainForm.N18Click(Sender: TObject);
begin
if memo1.Focused then memo1.SelectAll;
if memo2.Focused then memo2.SelectAll;
end;
Меню «Перевод»
«перевести с кириллици в латиницу» acCyrToLat
Переводит текст из кириллицы в транслит. Текст данной процедуры будет рассмотрен ниже.
«перевести с латиници в кириллицу» acLatToCyr
Переводит текст из транслита в кириллицу. Текст данной процедуры будет рассмотрен ниже.
«Редактировать алфавит» acAlphEdit
Отображает форму редактирования словаря.
Меню «Справка»
«О программе»
Отображает форму «О программе»
Листинг 15.«Обработчик главного меню Справка -> О программе»
procedure TMainForm.N7Click(Sender: TObject);
begin
AboutForm.show;
end;
Форма «Редактор алфавита»
Данная форма предназначена для загрузки, сохранения и редактиро-вания словарей перевода кириллицы в транслит.
рис. 8. Форма «Редактора»
На форме расположены следующие компоненты:
TStringGrid;
TPanel;
TBitBtn (2 шт.);
TOpenDialog;
TSaveDialog;
TButton;
Компонент TStringGrid предназначен для ввода и просмотра таблицы перевода. На TPanel расположены все кнопки. TBitBtn – позволяют сохранять и загружать словари. Диалоги TOpenDialog и TSaveDialog предназначены для выбора файлов словарей. TButton – применяет текущие настройки к глобальному словарю (он расположен в Unit_main).
Обработчики событий.
При создании формы происходит заполнение таблицы (SlovGrid):
Листинг 16. «Созание формы Редактировать алфавит»
procedure TSlovarForm.FormCreate(Sender: TObject);
var
i1 :integer;
begin
SlovGrid.Cells[0,0]:= 'Русский';
SlovGrid.Cells[1,0]:= 'Перевод';
for i1:= 1 to 33 do
begin
SlovGrid.Cells[0,i1]:= alph_r[i1];
if i1 = 7 then SlovGrid.Cells[1,i1]:= b_jo
else SlovGrid.Cells[1,i1]:= alph[alph_r[i1]];
end;
f_name:= '';
end;
Обработчик нажатия на кнопку «Сохранить». Если пользователь выбрал файл, куда сохранить новый словарь, то происходит перезапись этого файла. В него (как в типизированный файл) записывается последовательность переменных типа ShortString. Эти данные (и их количество) берутся из таблицы SlovGrid:
Листинг 17. «Нажатия на кнопку Сохранить»
procedure TSlovarForm.SveButtClick(Sender: TObject);
var
f :file of shortstring;
i1 :integer;
str :shortstring;
begin
if savefile.execute then
begin
assignfile(f,SaveFile.FileName);
f_name:= SaveFile.FileName;
rewrite(f);
for i1:= 1 to SlovGrid.RowCount-1 do
begin