Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

pointer. Не могу разобраться... [D7]


новый ©   (2009-09-15 12:36:00) 

Подскажите пожалуйста. Есть такая библиотека GsvHashTable. ( http://gurin.tomsknet.ru/delphihashtable.html). Я хочу использовать TGsvStringHashTable.

Вот её описание:
TGsvStringHashTable = class(TGsvHashTableBase)
public
 constructor Create(TableSize: Integer);
 function    Add(const Key: String; Data: Pointer): Boolean; overload;
 function    Find(const Key: String): Pointer; overload;
end;

я использую её примерно вот так:
var i:Integer;
tabl:TGsvStringHashTable;
begin
tabl:=TGsvStringHashTable.create(65536);
for i:=0 to "some parameter"  do
tabl.add("some string",@i);

......

мне почему то кажется что так делать нельзя, и в таблицу запишется не то что мне нужно... Я прав?
И второй вопрос.  как мне вывести например в showmessage результат выполнения функции find?


новый   (2009-09-18 16:34:00) [1]

и опять Большое спасибо!


clickmaker   (2009-09-18 14:46:00) [2]

> где я не прав? и как нужно это писать правильно?

память в куче надо выделять
tabl.add("some string",StrNew(Inttostr(i)+'#'+Inttostr(j)));
потом, когда не нужна будет, освобождать StrDispose


новый   (2009-09-18 06:10:00) [3]

Разобрался. работает... там была не подключена зависимость(

Теперь у меня еще один глупый вопрос...
вот если мне надо записать туда строку, а потом её прочитать, то как нужно писать?

пробовал так:

tabl.add("some string",Pointer(Inttostr(i)+'#'+Inttostr(j)));

ShowMessage(String(Find(Key)));

Но выдает аксесс виолэйшн при выводе мессаджа...
Подскажите, где я не прав? и как нужно это писать правильно?


новый   (2009-09-15 13:37:00) [4]

странно. нву ладно. в любом случае БОЛЬШОЕ СПАСИБО. буду искать другие ошибки.


clickmaker   (2009-09-15 13:35:00) [5]

ну да


новый   (2009-09-15 13:33:00) [6]

ну... не знаю...
вот так надо делать tabl.add("some string",Pointer(i));?


clickmaker   (2009-09-15 13:25:00) [7]

> i-локальная переменная одной процедуры а мессадж вызывается
> из другой

а это тут неважно. что pointer, что integer - 4 байта
где-то в другом месте косяк
точно не указатель на i передаешь?


новый   (2009-09-15 13:15:00) [8]

да для разных ключей.
some parameter-число строк в файле some string-строка фала с номером i

еще одно уточнение: i-локальная переменная одной процедуры а мессадж вызывается из другой


clickmaker   (2009-09-15 13:11:00) [9]

и код желательно более реальный выкладывать.
непонятно, что такое "some parameter" и "some string"


clickmaker   (2009-09-15 13:10:00) [10]

быть не может
для разных ключей?


новый   (2009-09-15 13:07:00) [11]

пробовал так... но все время возвращает одно и то же число...


clickmaker   (2009-09-15 13:01:00) [12]

> значение i на данной интерации

Pointer(i)

ShowMessage(IntToStr(Integer(Find(Key))));


новый   (2009-09-15 12:58:00) [13]

значение i на данной интерации


новый   (2009-09-15 12:56:00) [14]

в общем этим циклом я перебираю строки некого файла. хеш таблица мне нужна для быстрого поиска номера строки в которой содержится некий текст. поэтому в дата мне нужно записать этот номер. тоесть значение i


clickmaker   (2009-09-15 12:48:00) [15]

> в таблицу запишется не то что мне нужно... Я прав?

прав.
а что нужно?


Наверх

Титульная страница Поиск, карта сайта Написать письмо