Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.08.2011, 15:40
dent dent вне форума
Прохожий
 
Регистрация: 31.08.2011
Сообщения: 3
Репутация: 10
По умолчанию TStringList IndexOf и IndexOfName в чём суть разницы

то что нашёл в инете ввело в заблуждение, тему удалите


Нарыл в инете
IndexOf - "В VCL Help написано, что TStringlist.IndexOf возвращает ссылку на ПЕРВЫЙ объект списка, имеющий заданное имя."

IndexOfName - "function IndexOfName(const Name: string): Integer;
возвращает индекс найденного элемента, для которого свойство Names совпадает со значением параметра Name."

возникло в случае поиска строки в списке типа:

0=один
0=два
0=три

list.IndexOf('0=один'); // 0, ожидал 0
list.IndexOf('0=два'); // 0, но хотелось 1
list.IndexOf('0=три'); // 0, хотел 2

я что то не так понимаю, зачем тогда два разных метода с одним результатом

Последний раз редактировалось dent, 31.08.2011 в 16:09.
Ответить с цитированием
  #2  
Старый 31.08.2011, 15:44
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Код:
function TStrings.IndexOfName(const Name: string): Integer;
var
  P: Integer;
  S: string;
begin
  for Result := 0 to GetCount - 1 do
  begin
    S := Get(Result);
    P := AnsiPos(NameValueSeparator, S);
    if (P <> 0) and (CompareStrings(Copy(S, 1, P - 1), Name) = 0) then Exit;
  end;
  Result := -1;
end;
По всей видимости выводит индекс строки, с первым вхождением подстроки в запись.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 31.08.2011, 15:53
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
0=один
1=два
2=три
0=пять

Код:
begin
  ShowMessage(IntToStr(Memo1.Lines.IndexOf('1=два'))); // = 1
  ShowMessage(IntToStr(Memo1.Lines.IndexOf('0=пять'))); // = 3
  ShowMessage(IntToStr(Memo1.Lines.IndexOfName('2'))); // = 2
  ShowMessage(Memo1.Lines.Values['2']); // = три
  ShowMessage(Memo1.Lines.Names[1]); // = 1
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 31.08.2011, 16:01
dent dent вне форума
Прохожий
 
Регистрация: 31.08.2011
Сообщения: 3
Репутация: 10
По умолчанию

копаю код, ишу бубен
Ответить с цитированием
  #5  
Старый 31.08.2011, 16:07
dent dent вне форума
Прохожий
 
Регистрация: 31.08.2011
Сообщения: 3
Репутация: 10
По умолчанию

копаю код, прошу прощения за дезинформацию
Ответить с цитированием
  #6  
Старый 31.08.2011, 22:30
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

IndexOf() рассматривает строки в списке как единое целое. Например, если ищется строка "Вася" и она есть, то функция вернёт её порядковый номер (нумерация с нуля).
IndexOfName() осуществляет парсинг, т.е. она рассматривает строки, состоящие из трёх элементов: Name = Value. Поиск ведётся только по идентификатору до знака равенства (Name).
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:23.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter