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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 4 061

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

Здравствуйте, уважаемые эксперты!
есть програмка она выдает список айпи адресов выбранной страны из ComboBox
список айпи записан в одномерном массиве
так вот я привел пример программы, она замечательно работает, но если я увеличу количество записей в массиве например до 2000, то есть 2000 айпи адресов будет выдавтаь у страны какой либо, тогда мне пишется такое сообщение:

Too many local constans. Use shooter procedures.

Я понял смысл ошибки, но не знаю как заменить. ведь мне в дальнейшем необходимо чтобы программа выдавала и 10000 айпи адресов. и нужно чтобы вся программа была в одном .exe файле, то есть чтобы небыло подгружаемых dll или баз данных.
помогите пожалуйста

Приложение:
  1. procedure TForm1.cbb1Change(Sender: TObject);
  2. var S: integer;
  3. var i:Integer;
  4. var andorra: array[1..3] of string;
  5. var afgan: array[1..2] of string;
  6. var amerika: array[1..3] of string;
  7. begin
  8. S:=cbb1.ItemIndex;
  9. andorra[1]:='192.123.123.13';
  10. andorra[2]:='192.123.123.14';
  11. andorra[3]:='192.123.123.15';
  12. if s=0 then
  13. begin
  14. mmo1.Clear;
  15. for i:= 1 to 3 do
  16. mmo1.Lines.Add(andorra[i]);
  17. end
  18. else
  19. afgan[1]:='13.255.22.22';
  20. afgan[2]:='13.255.22.23';
  21. if s=1 then
  22. begin
  23. mmo1.Clear;
  24. for i:= 1 to 2 do
  25. mmo1.Lines.Add(afgan[i]);
  26. end
  27. else
  28. amerika[1]:='133.212.232.23';
  29. amerika[2]:='133.212.232.24';
  30. amerika[3]:='133.212.232.25';
  31. if s=2 then
  32. begin
  33. mmo1.Clear;
  34. for i:= 1 to 3 do
  35. mmo1.Lines.Add(amerika[i]);
  36. end
  37. end;
  38. end.


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

Вопрос задал: winterrab (статус: Посетитель)
Вопрос отправлен: 19 апреля 2010, 10:35
Состояние вопроса: открыт, ответов: 0.


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

Всего сообщений: 11; последнее сообщение — 22 апреля 2010, 08:23; участников в обсуждении: 4.
min@y™

min@y™ (статус: Доктор наук), 19 апреля 2010, 10:43 [#1]:

Используй ресурсы. Загони в файл ресурсов всю инфу, прикомпили к ехе-шнику, а затем выдёргивай в TResourceStream и грузи в TStringList или куда-либо ещё.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 19 апреля 2010, 10:44 [#2]:

А можете показать, что в коде нужно исправить, что бы ошибка начала проявляться?
Галочка "подтверждения прочтения" - вселенское зло.
winterrab

winterrab (статус: Посетитель), 19 апреля 2010, 16:33 [#3]:

Ошибка появится если в массиве допустим
var andorra: array[1..3] of string;
я изменю 3 на 2000
var andorra: array[1..2000] of string;
и соответственно добавлю еще 1997 записей,
andorra[1]:='192.123.123.13';
andorra[2]:='192.123.123.14';
andorra[3]:='192.123.123.15';
andorra[4]:='192.123.123.14';
andorra[5]:='192.13.3.1';
...
andorra[2000]:='10.17.45.22';

тогда программа будет ругаться
winterrab

winterrab (статус: Посетитель), 19 апреля 2010, 16:38 [#4]:

min@y™: Спасибо, теперь буду читать инфу по этому, как разберусь сообщу получилось или нет :-)
min@y™

min@y™ (статус: Доктор наук), 19 апреля 2010, 17:36 [#5]:

Цитата (winterrab):

Ошибка появится если в массиве допустим var andorra: array[1..3] of string; я изменю 3 на 2000 var andorra: array[1..2000] of string; и соответственно добавлю еще 1997 записей, andorra[1]:='192.123.123.13'; andorra[2]:='192.123.123.14'; andorra[3]:='192.123.123.15'; andorra[4]:='192.123.123.14'; andorra[5]:='192.13.3.1'; ... andorra[2000]:='10.17.45.22';

Ты чего, руками всё это набирал?
Про диапазон IP-адресов не слышал? IP-адрес - это ж 4 байта, нафига его хранить в строках?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
winterrab

winterrab (статус: Посетитель), 19 апреля 2010, 20:54 [#6]:

min@y™: нет не руками, я в екселе все подготовил у меня готовые есть шаблоны от 1 до 2000.
min@y™

min@y™ (статус: Доктор наук), 19 апреля 2010, 21:20 [#7]:

Цитата (winterrab):

нет не руками, я в екселе все подготовил у меня готовые есть шаблоны от 1 до 2000.

ААААААААААААААА, какой кашмар!!!
Ты ещё полное собрание сочинений дедушки Ленина к проге прилинкуй, будет ваще супер.
А если серьёзно - не храни IP-адреса в виде массива строк, храни в виде массива целых чисел типа DWORD. Особенно, если они идут подряд. В этом случае можно хранить только начальный адрес и количество. Каждый адрес будет занимать 4 байта памяти, а если хранить строкой - от 7 до 15 байт. Оно тебе надо?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Егор

Егор (статус: 10-ый класс), 20 апреля 2010, 19:35 [#8]:

min@y™, а потом вопрос появится - "а как из числа DWORD получить IP адрес"
:)
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
min@y™

min@y™ (статус: Доктор наук), 20 апреля 2010, 20:17 [#9]:

Цитата (Егор):

а потом вопрос появится - "а как из числа DWORD получить IP адрес" :)

Ну, научу, вспомню молодость!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
winterrab

winterrab (статус: Посетитель), 21 апреля 2010, 23:28 [#10]:

Ребята, подскажите дальше в чём проблема, прочитал примеры составил код, только он что-то не работает...
procedure TForm1.ComboBox1Change(Sender: TObject);
{$R resources.res}
var S: integer;
function GetResourceAsString(ResName: pchar; ResType: pchar): string;
begin
S:=combobox1.ItemIndex;
if s=0 then
begin
memo1.Clear;
Memo1.Lines.Text := GetResourceAsString('49', 'text');
else
begin
memo1.Clear;
Memo1.Lines.Text := GetResourceAsString('50', 'text');
end;
end.
соответстенно 49 и 50 это 2 текстовика, которые я кинул в файлы ресурсов, в которых хранятся диапазоны. Уважаемый
min@y™: к сожалению я неправильно высказался, там IP адреса в разброс и нет последовательности типа 1,2,3,4... это я в примере написал такие айпи, простите что ввел в заблуждение
min@y™

min@y™ (статус: Доктор наук), 22 апреля 2010, 08:23 [#11]:

Цитата (winterrab):

к сожалению я неправильно высказался, там IP адреса в разброс и нет последовательности типа 1,2,3,4... это я в примере написал такие айпи, простите что ввел в заблуждение

Да пофигу, что вразброс! Я тебе ещё раз повторяю: не храни IP-адреса в строках - это неэффективно, медленно и занимает много памяти.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

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

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