|
Вопрос # 4 061/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
есть програмка она выдает список айпи адресов выбранной страны из ComboBox
список айпи записан в одномерном массиве
так вот я привел пример программы, она замечательно работает, но если я увеличу количество записей в массиве например до 2000, то есть 2000 айпи адресов будет выдавтаь у страны какой либо, тогда мне пишется такое сообщение:
Too many local constans. Use shooter procedures.
Я понял смысл ошибки, но не знаю как заменить. ведь мне в дальнейшем необходимо чтобы программа выдавала и 10000 айпи адресов. и нужно чтобы вся программа была в одном .exe файле, то есть чтобы небыло подгружаемых dll или баз данных.
помогите пожалуйста
Приложение: Переключить в обычный режим- procedure TForm1.cbb1Change(Sender: TObject);
- var S: integer;
- var i:Integer;
- var andorra: array[1..3] of string;
- var afgan: array[1..2] of string;
- var amerika: array[1..3] of string;
- begin
- S:=cbb1.ItemIndex;
- andorra[1]:='192.123.123.13';
- andorra[2]:='192.123.123.14';
- andorra[3]:='192.123.123.15';
- if s=0 then
- begin
- mmo1.Clear;
- for i:= 1 to 3 do
- mmo1.Lines.Add(andorra[i]);
- end
- else
- afgan[1]:='13.255.22.22';
- afgan[2]:='13.255.22.23';
- if s=1 then
- begin
- mmo1.Clear;
- for i:= 1 to 2 do
- mmo1.Lines.Add(afgan[i]);
- end
- else
- amerika[1]:='133.212.232.23';
- amerika[2]:='133.212.232.24';
- amerika[3]:='133.212.232.25';
- if s=2 then
- begin
- mmo1.Clear;
- for i:= 1 to 3 do
- mmo1.Lines.Add(amerika[i]);
- end
- end;
- end.
 |
Вопрос задал: winterrab (статус: Посетитель)
Вопрос отправлен: 19 апреля 2010, 10:35
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 11; последнее сообщение — 22 апреля 2010, 08:23; участников в обсуждении: 4.
|
min@y™ (статус: Доктор наук), 19 апреля 2010, 10:43 [#1]:
Используй ресурсы. Загони в файл ресурсов всю инфу, прикомпили к ехе-шнику, а затем выдёргивай в TResourceStream и грузи в TStringList или куда-либо ещё.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 19 апреля 2010, 10:44 [#2]:
А можете показать, что в коде нужно исправить, что бы ошибка начала проявляться?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
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 (статус: Посетитель), 19 апреля 2010, 16:38 [#4]:
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 (статус: Посетитель), 19 апреля 2010, 20:54 [#6]:
min@y™: нет не руками, я в екселе все подготовил у меня готовые есть шаблоны от 1 до 2000.
|
|
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™ (статус: Доктор наук), 20 апреля 2010, 20:17 [#9]:
Цитата (Егор):
а потом вопрос появится - "а как из числа DWORD получить IP адрес"
Ну, научу, вспомню молодость!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
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™ (статус: Доктор наук), 22 апреля 2010, 08:23 [#11]:
Цитата (winterrab):
к сожалению я неправильно высказался, там IP адреса в разброс и нет последовательности типа 1,2,3,4... это я в примере написал такие айпи, простите что ввел в заблуждение
Да пофигу, что вразброс! Я тебе ещё раз повторяю: не храни IP-адреса в строках - это неэффективно, медленно и занимает много памяти.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|