|
Вопрос # 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;
- begin
- if 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;
- begin
- Result:=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)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|