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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 2 732

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Суть вопроса состоит в "правильности" написания подобного кода.

Необходимо добавить текст в Ворд, во множество закладок, которые часто повторяются, поэтому и идут циклы. Как смог, так и сделал))) но вот меня чтото смущает подобный код...циклы...циклы...циклы...

Или может его можно както "оптимизировать"... =)

Приложение:
  1. for i:=1 to 21 do
  2. begin
  3. BM:='n'+IntToStr(i);
  4. R:= Doc.Bookmarks.Item(BM).Range;
  5. R.InsertAfter(OrgName.Text);
  6. end;
  7. for i:=1 to 14 do
  8. begin
  9. BM:='ps'+IntToStr(i);
  10. R:= Doc.Bookmarks.Item(BM).Range;
  11. R.InsertAfter(Surname.Text);
  12. end;
  13. for i:=1 to 13 do
  14. begin
  15. BM:='pn'+IntToStr(i);
  16. R:= Doc.Bookmarks.Item(BM).Range;
  17. R.InsertAfter(Name.Text);
  18. end;
  19. for i:=1 to 13 do
  20. begin
  21. BM:='po'+IntToStr(i);
  22. R:= Doc.Bookmarks.Item(BM).Range;
  23. R.InsertAfter(Patronymic.Text);
  24. end;
  25. for i:=1 to 9 do
  26. begin
  27. BM:='pass'+IntToStr(i);
  28. R:= Doc.Bookmarks.Item(BM).Range;
  29. R.InsertAfter(PasportS.Text);
  30. end;
  31. for i:=1 to 9 do
  32. begin
  33. BM:='pasn'+IntToStr(i);
  34. R:= Doc.Bookmarks.Item(BM).Range;
  35. R.InsertAfter(PasportN.Text);
  36. end;
  37. for i:=1 to 9 do
  38. begin
  39. BM:='pasv'+IntToStr(i);
  40. R:= Doc.Bookmarks.Item(BM).Range;
  41. R.InsertAfter(PasportV.Text);
  42. end;
  43. for i:=1 to 9 do
  44. begin
  45. BM:='pasvd'+IntToStr(i);
  46. R:= Doc.Bookmarks.Item(BM).Range;
  47. R.InsertAfter(PasportVD.Text);
  48. end;
  49. for i:=1 to 6 do
  50. begin
  51. BM:='inU'+IntToStr(i);
  52. R:=Doc.Bookmarks.Item(BM).Range;
  53. R.InsertAfter(IndexU.Text[i]);
  54. end;
  55. for j:=1 to 3 do
  56. begin
  57. for i:=1 to 6 do
  58. begin
  59. BM:='inF'+IntToStr(i)+IntToStr(j);
  60. R:=Doc.Bookmarks.Item(BM).Range;
  61. R.InsertAfter(IndexF.Text[i]);
  62. end;


rod13 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: rod13 (статус: Посетитель)
Вопрос отправлен: 5 мая 2009, 13:27
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, rod13!
Смотрим внимательно на два первых куска и понимаем, что можно вынести в одну процедурку

procedure inse(bmn:string; count:integer; text:string);
  for i:=1 to count do
    begin
      BM:=bmn+IntToStr(i);
      R:= Doc.Bookmarks.Item(BM).Range;
      R.InsertAfter(text);
    end;
end;
и теперь первые 8 штук заключается в что то подобное
inse('n', 21, OrgName.Text);
inse('ps', 14, Surname.Text);
и так дальше (я только первые две строки написал, но дальше продолжить будет не сложно) - и сразу код стает прозрачнее.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 5 мая 2009, 14:22
Оценка за ответ: 5

Комментарий к оценке: спасибо большое, понял в каком направление мыслить...

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

Мини-форум пуст.

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

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