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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2010, 14:46   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Сообщение Упростить код

Как-нибудь можно упростить данный код
Код:
var
  txt: string;
  Server: TListItem;
begin
  txt := '\qw1\1000\qw2\2000\qw3\3000\qw4\4000';

  Server := ListView1.Items.Add;
  Server.Caption := '\qw1\';
  Server.SubItems.Add(Copy(txt, Pos('\qw1\', txt) + 5, Pos('\qw2\', txt) - 6));
  Delete(txt, 1, Pos('\qw2\', txt) - 1);

  Server := ListView1.Items.Add;
  Server.Caption := '\qw2\';
  Server.SubItems.Add(Copy(txt, Pos('\qw2\', txt) + 5, Pos('\qw3\', txt) - 6));
  Delete(txt, 1, Pos('\qw3\', txt) - 1);

  Server := ListView1.Items.Add;
  Server.Caption := '\qw3\';
  Server.SubItems.Add(Copy(txt, Pos('\qw3\', txt) + 5, Pos('\qw4\', txt) - 6));
  Delete(txt, 1, Pos('\qw4\', txt) - 1);

  Server := ListView1.Items.Add;
  Server.Caption := '\qw4\';
  Server.SubItems.Add(Copy(txt, Pos('\qw4\', txt) + 5, Length(txt)));
Shouldercannon вне форума Ответить с цитированием
Старый 20.10.2010, 14:56   #2
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

Попробуй так
Код:
var
  txt: string;
  Server: TListItem;
i,y: integer;
begin
  txt := '\qw1\1000\qw2\2000\qw3\3000\qw4\4000';

  Server := ListView1.Items.Add;
for i:=1 to 3 do
begin
y:=i+1;
  Server.Caption := '\qw'+i+'\';
  Server.SubItems.Add(Copy(txt, Pos('\qw'+i+'\', txt) + 5, Pos('\qw'+y+'\', txt) - 6));
  Delete(txt, 1, Pos('\qw'+y+'\', txt) - 1);
end;
Server := ListView1.Items.Add;
Server.Caption := '\qw4\';
Server.SubItems.Add(Copy(txt, Pos('\qw4\', txt) + 5, Length(txt)));
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Старый 20.10.2010, 15:00   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

IntToStr только не забудь
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.10.2010, 15:02   #4
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
IntToStr только не забудь
Ну да...
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Старый 20.10.2010, 15:37   #5
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

А если строка будет такой?
\qw\1\er\1000000\ty\16\ui\200

Последний раз редактировалось Shouldercannon; 20.10.2010 в 15:41.
Shouldercannon вне форума Ответить с цитированием
Старый 20.10.2010, 15:39   #6
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

а если такой то нужно будет писать как твой код или же как то приводить значения
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Старый 20.10.2010, 16:46   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

можно так:
Код:
var
  txt, sCaption : string;
  Server: TListItem;
begin
  txt := '\qw1\1000\qw2\2000\qw3\3000\qw4\4000';

  if txt[Length(txt)]<>'\' then txt := txt + '\';

  while Length(txt)>0 do begin
    Server := ListView1.Items.Add;
    sCaption := '';
    if txt[1]='\' then begin
       sCaption := '\';
       Delete(txt, 1, 1);
    end;
    Server.Caption := sCaption + Copy(txt,1, Pos('\',txt));
    Delete(txt, 1, Pos('\',txt));
    Server.SubItems.Add(Copy(txt, 1, Pos('\', txt) - 1));
    Delete(txt, 1, Pos('\',txt)-1);
    if txt = '\' then Break;
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.10.2010, 17:01   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А я бы вообще вынес повторяющиеся блоки в отдельную функцию
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Упростить код (Паскаль) crocodile Помощь студентам 2 26.01.2010 22:22
помогите упростить код serafim09 Microsoft Office Excel 9 14.10.2009 15:01
Помогите упростить код Ralf_ru Помощь студентам 7 01.04.2009 17:17