Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 355

/ вопрос решён /

Доброго времени суток, уважаемые эксперты! Как можно преобразовать строку Фамилия Имя Отчество в Фамилия И.О. не используя функцию PosEx???

Milady Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задала: Milady (статус: Посетитель)
Вопрос отправлен: 26 января 2009, 19:51
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Amidamaru

Здравствуйте, Milady!
Код функций в прилоении.
Использовать просто:
GetFIO('Фамилия Имя Отчество') = "Фамилия И О"
GetFIO('Фамилия Имя') = "Фамилия И"
GetFIO('Фамилия') = "Фамилия"

Приложение:
  1. function GetToken(var s:string;const Delimer:char = ' '):string;
  2. var i:integer;
  3. begin
  4. if s='' then Result:=''
  5. else begin
  6. i:=1;
  7. while not (s[i] in [Delimer,#0]) do inc(i);
  8. Result:=copy(s,1,i-1);
  9. Delete(s,1,i);
  10. end;
  11. end;
  12.  
  13. Function GetFIO(fullname: string): string;
  14. var sbuf: string;
  15. begin
  16. Result:=GetToken(fullname);
  17. if Result='' then exit;
  18. sbuf:=GetToken(fullname);
  19. if sbuf<>'' then
  20. begin
  21.  
  22. sbuf:=GetToken(fullname);
  23. if sbuf<>'' then
  24.  
  25. end;
  26. end;


Ответ отправил: Amidamaru (статус: 4-ый класс)
Время отправки: 26 января 2009, 20:38
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Ученый

Здравствуйте, Milady!
Предложу свой вариант решения:

var
S,b,c:string;
i:integer;
begin
I:=0;
 S:='Фамилия Имя Отчество';
repeat
 i:=i+1;
 b:=copy(S,i,1 );
until b=' ';
c:=copy(s,1,i+1)+'.';
repeat
 i:=i+1;
 b:=copy(S,i,1 );
until b=' ';
C:=c+copy(S,i+1,1 )+'.';

З.Ы. Удачи:))

Ответ отправил: Ученый (статус: 8-ой класс)
Время отправки: 27 января 2009, 07:02
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 26 января 2009, 22:10; участников в обсуждении: 2.
Milady

Milady (статус: Посетитель), 26 января 2009, 21:14 [#1]:

while not (s[i] in [Delimer,#0]) do inc(i);
Вопрос: что делает эта чать кода?
Amidamaru

Amidamaru (статус: 4-ый класс), 26 января 2009, 22:10 [#2]:

проходит посимвольно по строке s до тех пор пока
1)i не равно #0 (т.е. конец строки, string для совместимости всегда содержит #0 в конце)
2)или i не равно Delimer (параметр-константа по умолчанию равная символу пробела)
по окончании цикла i будет равно позиции Delimer в s или, если Delimer н найден, то i будет равно length(s)+1 , т.е. позиции завершающего нулевого символа
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.

31 января 2011, 19:33: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:39
Выполнено за 0.03 сек.