Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];

Вниз

Можно ли создать, заранее не описанную переменную в RunTime?   Найти похожие ветки 

 
AllDontFire   (2004-01-09 17:55) [0]

Привет, Всем!
Есть чат использующий TCP/IP. Список юзеров в ListView.
Как создать "некую" структуру, с помощью которой можно
быстро получать индексы пунктов ListView"а, соответствующих
ip-адресам юзеров, присылающих сообщения.

Вообщем, сейчас сделано так:
есть динамический массив
ip:array of string; где N - колво юзеров, и соответственно кол-во элементов ListView.

Когда юзер c ip-адресом FromIP присылает сообщение, в обработчике проверяется(ищется его индекс в ListView):

for i:=1 to n do if ip[i]=FromIP Then break;

после выхода по break: i- индекс юзера в ListView.
Но этот метод не устраивает, так как это тупой перебор.

В Visual FoxPro есть "Макроподстановка"(&&) и можно создавать переменные когда угодно во время выполнения программы, заранее не описывая их. Т.о. можно при добавлении нового юзера
с ip-адресом 10_0_0_180
сделать следующее:

N=N+1
svar_&&FromIP=N//всё равно что написать svar_10_0_0_180=N

Затем при приходе от него сообщения, в обработчике пишем:
i=svar_&&FromIP //индекс в ListView

Но нужно на Делфи :-)
Спасибо.


 
Строитель   (2004-01-09 17:58) [1]

А интертрепатор FoxPro тупо возьмет, и сделает то же самое - перебором. Только искть будет не IP адрес, а имя переменной.


 
Тимохов   (2004-01-09 18:04) [2]

Перебор - нормально,
Если конечно у тебя пользователей 100000, то тогда можно сделать дерево.


 
Тимохов   (2004-01-09 18:07) [3]

Вопросик, что настораживает конструкция "for i:=1 to n do if ip[i]=FromIP Then break". Как ты потом пользуешься результатом поиска? В какой переменной у тебя храниться найденная позиция в массиве?


 
AllDontFire   (2004-01-12 14:07) [4]

to Тимохов
"конструкция" настороживает только тем, что это перебор, а мне нужно быстрее.Результат поиска "i" - соответствует индексу пункта в Листвью.
Конечно 100000 пользователей не будет, но можно по-подробней как в таких случаях деревья применять?


 
PVOzerski   (2004-01-12 14:41) [5]

Переменную с новым именем в рантайме на Delphi не сделать, ибо это компилятор. Я бы сортировал массив IP-адресов при каждом добавлении/ухождении юзера, а в упорядоченном массиве искать нужный элемент можно существенно быстрее. Правда, смысл в этом есть, только если массив действительно большой.


 
Тимохов   (2004-01-12 14:46) [6]

AllDontFire (12.01.04 14:07) [4]
Ты все-таки не ответил на вопрос "Как ты потом пользуешься результатом поиска? В какой переменной у тебя храниться найденная позиция в массиве?"


 
Тимохов   (2004-01-12 14:48) [7]

"Конечно 100000 пользователей не будет, но можно по-подробней как в таких случаях деревья применять?"

Читай http://algolist.manual.ru/ про красно-черные бинарные деревья. С помощью их ищи. Важно, конечно, сколько у тебя будет пользователей?


 
GLFox   (2004-01-12 14:58) [8]

У каждого итема в листвью есть свойство Data!!! Читай хелп.


 
Тимохов   (2004-01-12 15:10) [9]

GLFox (12.01.04 14:58) [8]
Это кому?


 
Erik   (2004-01-12 15:12) [10]

Блин все понятно, это продвинутый лаймер!
Ты хоть знаеш, что поиск по 1000 элементам выполняется практически мгоновено! А твой FoxPro одну макроподстановку медленей делает. И вобше посмотри элементарный пример:
RMyData = record
IP: STring;
Nodex: Integer;
Name: String; //- Имя юсера
end;
TArrIP = array of RMyData;
...
Var IP: TArrIP;


 
GLFox   (2004-01-12 15:13) [11]

>>Тимохов © (12.01.04 15:10) [9]
Что значит кому?


 
Тимохов   (2004-01-12 15:26) [12]

GLFox (12.01.04 15:13) [11]
На самом деле, я уже запустал в данном топике.
Просто я хотел указать автору вопроса на то, что
при поиске for i:=1 to n do if ip[i]=FromIP Then break в качестве найденного индекса массива нельзя использовать i по причине "After the for statement terminates, the value of counter is undefined."



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
14-72928
MPS
2004-01-01 12:33
2004.01.23
Что такое программируемый калькулятор?


6-72853
Stas1
2003-11-20 15:54
2004.01.23
Post


1-72836
Adil Aliyev
2004-01-12 11:02
2004.01.23
Картинка в ListBox


1-72737
zzzzz
2004-01-06 16:08
2004.01.23
Как сделать чтобы ShellExecute открывал страницу в новом окне?


14-72887
GrayFace
2004-01-03 17:06
2004.01.23
Тупость правил форума





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский