Конференция "Прочее" » Недокументированая возможность TStringList.Find
 
  • Dmitry S © (06.09.08 21:31) [0]
    К примеру, есть сортированный список

    a
    b
    c
    d.a
    d.b
    d.c
    e
    f


    Необходимо найти первую строку, которая начинается на "d.".
    StringList.Find('d.', Index), естественно, возвращает False, но в Index возвращает как раз ту, первую строку: "d.a", точнее ее номер.

    Безопасно ли будет использовать данную возможность?
  • Servy © (06.09.08 22:10) [1]
    > К примеру, есть сортированный список


    К примеру, есть хелп :)

    Use Find to obtain the index in a sorted list where the string S should be added. If the string S, or a string that differs from S only in case when CaseSensitive is false, already exists in the list, Find returns true. If the list does not contain a string that matches S, Find returns false. The index where S should go is returned in the Index parameter. The value of Index is zero-based, where the first string has the index 0, the second string has the index 1, and so on.

    Note: Only use Find with sorted lists. For unsorted lists, use the IndexOf method instead.

    Прочитав его, можно заключить, что Find следует использовать для сортированных списков чтобы определить в какой позиции должна находиться строка S (при этом возвращается True, если она уже есть в списке). Так что, да, Find в приведенном примере всегда будет возвращать нужный индекс, однако если строк, начинающихся на "d." нет, то будет получен индекс строки "e". Правда возможность эта хорошо документирована :).
  • Юрий Зотов © (06.09.08 22:31) [2]
    TStringList.Find не ищет строку которая начинается на что-то. Этот метод ищет строку, которая равна чему-то.

    В Вашем списке строки 'd.' нет, поэтому метод ее не находит и возвращает False. А переменная Index принимает значение, которое имела бы строка 'd.', если бы она была в списке.
  • Dmitry S © (06.09.08 22:33) [3]
    Честно, не разобрал смысла в

    > should go is returned

    .

    Спасибо! :)
  • Dmitry S © (06.09.08 22:35) [4]

    > Юрий Зотов ©   (06.09.08 22:31) [2]

    Поставленная задача ведь решается?
  • {RASkov} © (06.09.08 23:18) [5]
    > Необходимо найти первую строку, которая начинается на "d.".

    В таком списке:
    a
    b
    c
    e
    f

    > Поставленная задача ведь решается?

    Сам как думаешь?
  • Германн © (07.09.08 00:18) [6]

    > Честно, не разобрал смысла в
    >
    > > should go is returned
    >

    Читать надо с чувством, с толком, с расстановкой. А не выдергивать отдельные слова из строки.
  • McSimm © (07.09.08 01:12) [7]
    The index
    where S should go

    is returned
    in the Index parameter.
  • turbouser © (07.09.08 01:22) [8]
    Одно интересно - зачем 2 метода поиска?
    Достаточно было бы указать IndexOf('bla',IsSorted,[caseInSensitive,PartialSearch]) например.
 
Конференция "Прочее" » Недокументированая возможность TStringList.Find
Есть новые Нет новых   [134442   +14][b:0][p:0.001]