Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2013, 08:28   #1
igh0st
Форумчанин
 
Аватар для igh0st
 
Регистрация: 05.07.2010
Сообщений: 136
По умолчанию Хранение и поиск значения по строковому наименованию

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

Последний раз редактировалось igh0st; 23.09.2013 в 08:34.
igh0st вне форума Ответить с цитированием
Старый 23.09.2013, 08:30   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно в ini-файле и использовать TIniFile или просто TStringList
Код:
Name1=значение
Name2=значение
...
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.09.2013, 08:32   #3
igh0st
Форумчанин
 
Аватар для igh0st
 
Регистрация: 05.07.2010
Сообщений: 136
По умолчанию

Можно в принципе и в XML в памяти, или свой класс написать, но может есть что-нибудь проще.
igh0st вне форума Ответить с цитированием
Старый 23.09.2013, 08:39   #4
igh0st
Форумчанин
 
Аватар для igh0st
 
Регистрация: 05.07.2010
Сообщений: 136
По умолчанию

Или к примеру в TStrings записывать:
Наименование значения + Разделитель + Строковое значение

А потом при поиске перебирать значения, вытаскивать их названия, сверять с поисковым патерном и выдавать значение...

Но это тоже как-то коряво, может все-таки есть что-то штатное.
igh0st вне форума Ответить с цитированием
Старый 23.09.2013, 09:09   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А потом при поиске перебирать значения, вытаскивать их названия, сверять с поисковым патерном и выдавать значение...
Вы заблуждаетесь.
При использовании TStringList перебирать значения не придётся - есть методы, скрывающие перебор (причём, даже эффективный, по ключу, если список сортированный) от программиста.
см. методы .Find и .IndexOf

либо, как указал Аватар, если искомые строковые значения как ключи - уникальны (а в вашем случае они именно уникальны), тогда смотрите свойство [Values]

второе поясню примером кода:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  ts : TStringList;
begin
   ts := TStringList.Create;

   // прочитаем значения из ini файла
   (*
    например, в INI там такие значения:

      DisplayGrid=192.168.1.2
      SnapToGrid=10.68.61.2
      GridSizeX=80.82.1.1.
      GridSizeY=81.124.1.2
      *)
    ts.LoadFromFile('d:\test1.ini');
    
    ShowMessage('для ключа с имененм GridSizeX найденное значение будет '+
           ts.Values['GridSizeX']);

    ShowMessage('для ключа с имененм SnapToGrid найденное значение будет '+
           ts.Values['SnapToGrid']);

    ts.Free;
end;

Последний раз редактировалось Serge_Bliznykov; 23.09.2013 в 09:13.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.09.2013, 09:16   #6
igh0st
Форумчанин
 
Аватар для igh0st
 
Регистрация: 05.07.2010
Сообщений: 136
По умолчанию

Вот спасибо, так спасибо! Помню же было что-то подобное )))

От себя добавлю, что добавление новых уникальных именованных элементов осуществляется простым присвоением значения по индексу:

Код:
MyList := TStringList.Create;
try
    MyList.Values['Name']  := 'Vladimir';
    MyList.Values['Family'] := 'Putin';
    ShowMessage('Hello ' + MyList.Values['Name'] + ' ' + MyList.Values['Family'] + '!');
finally
    MyList.Free;
end;

Последний раз редактировалось Stilet; 23.09.2013 в 12:03.
igh0st вне форума Ответить с цитированием
Старый 23.09.2013, 11:12   #7
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

TMemIniFile - удобненько и в файл слить можно
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 23.09.2013, 11:19   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Slym, TMemIniFile - это надстройка над TStringList...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск цены товара по дате и наименованию dronicos Microsoft Office Excel 4 02.11.2012 19:31
Поиск значения LelikBolik Помощь студентам 0 05.11.2011 18:02
WINAPI привести int к строковому типу Alt_Shift Помощь студентам 9 25.06.2011 20:57
Поиск значения freeenergy Microsoft Office Excel 4 24.05.2011 17:10
Как объядинить суммы по одному наименованию в сводной таблице? Fiscal Microsoft Office Excel 11 01.03.2010 14:52