![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Добрый вечер всем. У меня такой вопрос. В ComboBox грузится список людей, мне требуется из полной ФИО (Иванов Иван Иваныч) получить в Edit Иванов И.И.. Подскажите как лучше организовать такое.
Код:
procedure TForm1.FIO;
var s : String;
i : integer;
begin
s := ComboBox2.Text;
Edit1.Text := '???';
end; |
|
#2
|
||||
|
||||
|
Хорошая заготовка кода.
В общем нужно бежать по строке (со n-го символа (n>1)) и копировать заглавные буквы. Код:
if str[i] in ['А'..'Я'] then... Последний раз редактировалось M.A.D.M.A.N., 08.10.2013 в 19:23. |
|
#3
|
||||
|
||||
|
Выбирайте
Код:
function hfs(ds: string): string;
var
i: integer;
s: string;
flg: boolean;
begin
s:= '';
flg:= false;
for i := 1 to Length(ds) do
begin
s:= s + ds[i];
if ds[i] = ' ' then
begin
if flg then Result:= Result+ s[1] + '.' else Result:= s;
s:= '';
flg:= true;
end;
if (flg) and (i = Length(ds)) then Result:= Result + s[1] + '.';
end;
end;Код:
function hfs(ds: string): string;
var
i: integer;
begin
i:= Pos(' ', ds);
if i > 0 then
begin
Result:= Copy(ds, 1, i);
i:= PosEx(' ', ds, i);
Result:= Result + Copy(ds, i+1, 1) + '.';
i:= PosEx(' ', ds, i);
Result:= Result + Copy(ds, i+1, 1) + '.';
end else
Result:= ds;
end;Код:
function hfs(ds: string): string; var sl: TStrings; begin sl:= TStringList.Create; sl.Delimiter:= ' '; sl.DelimitedText:= ds; if sl.Count > 0 then Result:= sl.Strings[0] + ' ' + sl.Strings[1][1] + '.' + sl.Strings[2][1] + '.' else Result:= ds; sl.Free; end; Добавлено значительно позже Цитата:
Код:
function hfs(ds: string): string;
var
i: integer;
flg: boolean;
begin
flg:= true;
for i := 1 to Length(ds) do
begin
if ds[i] = ' ' then
begin
if flg then
Result:= Result + ' ';
flg:= false;
end;
if flg then
Result:= Result + ds[i];
if (not flg) and (ds[i] in ['А'..'Я']) then
Result:= Result + ds[i] + '.';
end;
end;4250 Последний раз редактировалось @Rafa3L, 09.10.2013 в 09:38. |
| Этот пользователь сказал Спасибо @Rafa3L за это полезное сообщение: | ||
fofka (09.10.2013)
| ||
|
#4
|
||||
|
||||
|
Может кому и пригодится. Как говорится, пусть будет.
Код:
function f(a:string):string;
var
b:string;
begin
b:=copy(a,1,pos(' ',a));
delete(a,1,pos(' ',a));
b:=b+a[1]+'.';
delete(a,1,pos(' ',a));
f:=b+a[1]+'.';
end;
procedure TForm1.FIO;
begin
Edit1.Text := f(ComboBox2.Text);
end;Спасибо всем за помощь. |
|
#5
|
||||
|
||||
|
Ща я вам праздник испорчу.
![]() Ни один из приведенных примеров не даст ожидаемый результат на таком варианте: иВанов максим петрович Ибо нет обработки строчных, прописных букв согласно исходной постановки задачи. И это я еще про юникод молчу. ![]() Стыдно товарищи! |
|
#6
|
||||
|
||||
|
Оффтоп:
Да чтож тебя, УК Страдалецъ, всё время на ИИ-то тянет, ну прям мозги должны быть в любой ерунде, и всё тут! ![]() В задании есть Цитата:
На выходе всех функций, по списку: Цитата:
Во второй hfs незначительная ошибка: нужно при первом поиске пробела увеличить i на еденицу Код:
...
i:= PosEx(' ', ds, i) + 1;
...Код:
function f(a: string): string;
begin
Result:= Copy(a, 1, Pos(' ', a));
Delete(a, 1, Pos(' ', a));
Result:= Result + a[1] + '.';
Delete(a, 1, pos(' ', a));
Result:= Result + a[1] + '.';
end;З.Ы. Кстати, можно ещё в Edit`е свойство CharCase в ecLowerCase установить, и тогда совсем весело будет. |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
fofka (12.10.2013)
| ||