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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2011, 13:19   #1
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
Радость Transliteration строки

Хотел использовать данный код чтобы перевести анг буквы в русские но выдает ошибки
[Error] Unit1.pas(116): Duplicate case label
[Error] Unit1.pas(117): Incompatible types: 'Char' and 'String'
[Error] Unit1.pas(118): Incompatible types: 'Char' and 'String'
[Error] Unit1.pas(119): Incompatible types: 'Char' and 'String'
на строчках где 2 анг буквы ('ye': k:=k+'ё'; )
Как избежать такого?
Код:
function Transliteration(s: string): string;
var
i: integer;
k: string;
begin
for i:=1 to Length(s) do
begin
case s[i] of
'a': k:=k+'а';
'b': k:=k+'б';
'v': k:=k+'в';
'g': k:=k+'г';
'd': k:=k+'д';
'e': k:=k+'е';
'ye': k:=k+'ё';
'zh': k:=k+'ж';
'z': k:=k+'з';
'i': k:=k+'и';
'y': k:=k+'й';
'k': k:=k+'к';
'l': k:=k+'л';
'm': k:=k+'м';
'n': k:=k+'н';
'o': k:=k+'о';
'p': k:=k+'п';
'r': k:=k+'р';
's': k:=k+'с';
't': k:=k+'т';
'u': k:=k+'y';
'f': k:=k+'ф';
'ch': k:=k+'х';
'z': k:=k+'ц';
'ch': k:=k+'ч';
'sh': k:=k+'ш';
'ch': k:=k+'щ';
'''': k:=k+'ъ';
'y': k:=k+'ы';
'''': k:=k+'ь';
'e': k:=k+'э';
'yu': k:=k+'ю';
'ya': k:=k+'я';
'A': k:=k+'А';
'B': k:=k+'Б';
'V': k:=k+'В';
'G': k:=k+'Г';
'D': k:=k+'Д';
'E': k:=k+'Е';
'Ye': k:=k+'Ё';
'Zh': k:=k+'Ж';
'Z': k:=k+'З';
'I': k:=k+'И';
'Y': k:=k+'Й';
'K': k:=k+'К';
'L': k:=k+'Л';
'M': k:=k+'М';
'N': k:=k+'Н';
'O': k:=k+'О';
'P': k:=k+'П';
'R': k:=k+'Р';
'S': k:=k+'С';
'T': k:=k+'Т';
'U': k:=k+'У';
'F': k:=k+'Ф';
'Ch': k:=k+'Х';
'Z': k:=k+'Ц';
'Ch': k:=k+'Ч';
'Sh': k:=k+'Ш';
'Ch': k:=k+'Щ';
'''': k:=k+'Ъ';
'Y': k:=k+'Ы';
'''': k:=k+'Ь';
'E': k:=k+'Э';
'Yu': k:=k+'Ю';
'Ya': k:=k+'Я';
else k:=k+s[i];
end;
end;
Result:=k;
end;
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Старый 03.06.2011, 13:41   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

'ch': k:=k+'х';
Где вы видели СИМВОЛ 'ch
В качестве идентификатора ветки можно использовать только отдельные символы. 'ch' это уже строка. Об этом и говорит Delphi. нужен один символ (char) вижу строку(string) .
перейти для сочетаний на if then else if ...
Код:
case s[i] of
....
'c': if copy(s,i,2)='ch' then ....
      else ....
...
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 03.06.2011 в 13:44.
evg_m вне форума Ответить с цитированием
Старый 03.06.2011, 14:21   #3
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

не пойму как писать это
сделал так, матерится
Код:
'y': k:=k+'й'; if copy(s,i,2)='ye' then k:=k+'ё'
else begin if copy(s,i,2)='yu' then  k:=k+ю'
else begin if copy(s,i,2)='ya' then k:=k+'я';end; end;
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Старый 03.06.2011, 14:27   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
'y': begin
       k:=k+'й'; 
       if copy(s,i,2)='ye' then k:=k+'ё'
       else if copy(s,i,2)='yu' then  k:=k+'ю'
       else if copy(s,i,2)='ya' then k:=k+'я';
     end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.06.2011, 15:39   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

grafgrial

посмотрите сюда
правда, там готовое решение обратной задачи (из русского -> транслит)
но по образу и подобию можно написать и обратную функцию.
только при организации поиска по таблице Table2 я бы переформировал таблицу так, чтобы более длиные последовательности были вначале...

если до вечера сами не справитесь - напишу программу.

и на будущее, если что-то может быть вынесено в структуры данных (массивы, списки и т.д. ) то это должно быть вынесено! Иначе получается муторный, ненадёжный, ненаглядный и не модицифируемый код!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.06.2011, 17:17   #6
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
grafgrial

посмотрите ....
да помоги, пожалуйста
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0 . Если совпадающих подстрок нет, Шпунюся Помощь студентам 1 16.12.2010 21:02
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Дбавление новой строки, после строки с подходящими параметрами RailOS Microsoft Office Excel 5 18.08.2010 10:12
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10