| 
| 
 | Вопрос # 2 355/ вопрос решён / | 
 |  Доброго времени суток, уважаемые эксперты! Как можно преобразовать строку Фамилия Имя Отчество в Фамилия И.О. не используя функцию PosEx??? 
|  |   Вопрос задала: Milady (статус: Посетитель)Вопрос отправлен: 26 января 2009, 19:51
 Состояние вопроса: решён, ответов: 2.
 |  Ответ #1. Отвечает эксперт: Amidamaru Здравствуйте, Milady!Код функций в прилоении.
 Использовать просто:
 GetFIO('Фамилия Имя Отчество') = "Фамилия И О"
 GetFIO('Фамилия Имя') = "Фамилия И"
 GetFIO('Фамилия') = "Фамилия"
 Приложение:Переключить в обычный режим function GetToken(var s:string;const Delimer:char = ' '):string;var i:integer;beginif s='' then Result:=''else begin i:=1; while not (s[i] in [Delimer,#0]) do inc(i); Result:=copy(s,1,i-1); Delete(s,1,i);end;end; Function GetFIO(fullname: string): string;var sbuf: string;beginResult:=GetToken(fullname);if Result='' then exit;sbuf:=GetToken(fullname);if sbuf<>'' then  begin   sbuf:=GetToken(fullname);  if sbuf<>'' then   end;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 (статус: Посетитель), 26 января 2009, 21:14 [#1]:while not (s[i] in [Delimer,#0]) do inc(i); Вопрос: что делает эта чать кода?
 |  
|   | Amidamaru (статус: 4-ый класс), 26 января 2009, 22:10 [#2]:проходит посимвольно по строке s до тех пор пока 1)i не равно #0 (т.е. конец строки, string для совместимости всегда содержит #0 в конце)
 2)или i не равно Delimer (параметр-константа по умолчанию равная символу пробела)
 по окончании цикла i будет равно позиции Delimer в s или, если Delimer н найден, то i будет равно length(s)+1 , т.е. позиции завершающего нулевого символа
 |  31 января 2011, 19:33: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |