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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2009, 11:22   #1
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
Смущение перевод текстовой строки в родительный падеж

Имеется некая информация состоящая из имени, фамилии и отчества. (все хранится в БД) К примеру, "Иванов Иван Иванович". Нужно, чтобы при нажатии на кнопку в поле текст заменялся на "Иванову Ивану Ивановичу". Может есть какая функция, кто -нибудь знает?
kate158 вне форума Ответить с цитированием
Старый 28.07.2009, 11:33   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Попоробуйте почитать это http://inteltec.ru/publish/articles/textan/1kx5_9.shtml. Может найдете для себя что-то полезное там . Статья интересная, но не осилил я ее. Многа буков)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.07.2009, 11:43   #3
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

ггг.смешно. мне бы чтонить в виде кода
kate158 вне форума Ответить с цитированием
Старый 28.07.2009, 11:49   #4
NieL
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 116
По умолчанию

Лови:

http://www.delphikingdom.com/asp/vie...?catalogid=412
NieL вне форума Ответить с цитированием
Старый 28.07.2009, 11:51   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
ггг.смешно.
Я и не над вами смеялся. Почитайте хотя бы это тогда http://programmersforum.ru/showthread.php?t=41821
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.07.2009, 12:12   #6
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

artemavd, никто и не говорит, что Вы смеялись надо мной. статья действительно интересна. думаю что нет такой функции, т.к. возможно слишком большое количество вариантов фамилий и имен, которые нужно склонить. наверно, здесь нужен искусственный интеллект. ладно оставлю правку вручную.
спасибо
kate158 вне форума Ответить с цитированием
Старый 28.07.2009, 13:45   #7
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Знаете, родительный падеж выглядел бы вот так:
"Иванова Ивана Ивановича".

А "Иванову Ивану Ивановичу" - это дательный падеж.

Я буду считать что вам нужен дательный.

Надо проверять последнюю букву в имени, фамилии и отчестве отдельно.

ИМЯ.

Если последняя буква - согласная, то просто надо добавить к слову букву "у":

Артур - Артуру
Иван - Ивану
Александр - Александру
Иванов - Иванову
Иванович - Ивановичу

Но не на все согласные буквы надо проверять, например на "й" не надо, если эта буква последняя, то надо заменить ее на "ю":

Алексей - Алексею
Андрей - Андрею
Дмитрий - Дмитрию

Если последняя буква - "а", то надо заменить ее на "е":

Анна - Анне
Елена - Елене
Полина - Полине

Если последняя буква - "я", то надо заменить ее на "и"

Мария - Марии
Анастасия - Анастасии

ФАМИЛИЯ.

Фамилию надо внимательней проверять.
Если фамилия заканчивается на "ий" или "ой" или просто заканчивается на "й", то надо конец(последние две буквы) заменить на "ому".

Толстой - Толстому
Мармазинский - Мармазинскому

ОТЧЕСТВО.

Тут ничего сложного, отчества могут заканчиваться на "в" или на "ч", так что тут просто добавить в конец букву "у"

Я надеюсь что ничего не упустил...
Код будет сложно мне написать, т.к. без делфи сижу...
Но попробую.

Код:
//Будем брать текст из одного edit'а, в котором будет находится ФИО,
//  анализировать его, и выводить в дательном падеже в другой edit при нажатии кнопки
//В edit'ах должно быть полное ФИО, так что сделаете какую-нибудь проверку у себя в базе

procedure TForm1.Button1Click(Sender: TObject);
var
 FIO, AFIO: string;  //ФИО и измененное ФИО
 Name, LastName, Patronymic: string; //Имя, фамилия и отчество
 AName, ALastName, APatronymic: string; //Измененные имя, фамилия и отчество
 WEnd: char; //Здесь будет последний символ
const
 SLetters = ['ц', 'к', 'н', 'г', 'ш', 'щ', 'з', 'х', 'ф', 'в', 'п', 'р', 'л', 'д', 'ж', 'ч', 'с', 'м', 'т', 'б']; //"й" в этот массив не заносим
begin
 FIO := edit1.Text;
 LastName := Copy(FIO, 1, Pos(' ', FIO) - 1); //Достаем фамилию
 Delete(FIO, 1, Length(LastName) + 1);  //Оставляем только имя и отчество
 Name := Copy(FIO, 1, Pos(' ', FIO) - 1); //Достаем имя
 Delete(FIO, 1, Length(Name) + 1); //Оставляем только отчество
 Patronymic := FIO; //Присваиваем его переменной

 {Анализируем фамилию}
 WEnd := LastName[Length(LastName)];
 ALastName := LastName;
 if WEnd = 'й' then
 begin
  Delete(ALastName, Length(ALastName) - 2, 2);
  ALastName := ALastName + 'ому';
 end
 else if WEnd in SLetters then
  ALastName := ALastName + 'у';

 {Анализируем имя}
 WEnd := Name[Length(Name)];
 AName := Name;
 if WEnd = 'й' then
 begin
  Delete(AName, Length(AName) - 1, 1);
  AName := AName + 'ю';  
 end
 else if WEnd in SLetters then
  AName := AName + 'у'
 else if WEnd = 'а' then
 begin
  Delete(AName, Length(AName) - 1, 1);
  AName := AName + 'е';
 end
 else if WEnd = 'я' then
 begin
  Delete(AName, Length(AName) - 1, 1);
  AName := AName + 'и'; 
 end;

 {Анализируем отчество}
 WEnd := Patronymic[Length(Patronymic)];
 APatronymic := Patronymic;
 if WEnd in SLetters then
  APatronymic := APatronymic + 'у';

 AFIO := Format('%s %s %s', [ALastName, AName, APatronymic]);
 edit2.Text := AFIO;
end;
Еще раз скажу, что в этом коде могут быть ошибки, но я надеюсь, вы сможете их исправить.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.

Последний раз редактировалось Neeter; 28.07.2009 в 14:18.
Neeter вне форума Ответить с цитированием
Старый 28.07.2009, 13:46   #8
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Цитата:
перевод текстовой строки в родительный падеж
Цитата:
"Иванову Ивану Ивановичу"
-это дательный падеж! ups не успела!!!
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 28.07.2009, 14:27   #9
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

дательный так дательный. описалась. а если фамилия имя и отчество не русские?+ фамилия может не склоняться
но все равно спасибо, друзья, за мысли =)

Последний раз редактировалось kate158; 28.07.2009 в 14:29.
kate158 вне форума Ответить с цитированием
Старый 28.07.2009, 14:45   #10
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

вот посмотри там и цифры склоняются и строки (родительный и дательный падежи) источник DelphiWorld
Вложения
Тип файла: rar unit sumstr.rar (2.3 Кб, 182 просмотров)
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из родительного падежа в именительный падеж KinderX Microsoft Office Excel 19 30.01.2020 16:33
Перевод строки (13) Jean-Esther Помощь студентам 2 27.02.2009 20:57
Присвоить элементу значение текстовой строки так, чтоб строка была в два и более ряда, а не в один alex2008ean Паскаль, Turbo Pascal, PascalABC.NET 1 15.12.2008 05:31
Перевод строки в функцию кетчуп Помощь студентам 6 23.11.2007 17:04
Перевод строки в матрицу Chepa Общие вопросы Delphi 14 28.01.2007 00:13