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

Вниз

Сравнивание стрингов   Найти похожие ветки 

 
Pasha L   (2005-06-11 01:49) [0]

Здравствуйте. Столкнулся я с такой проблемой. Я хочу сравнить две переменные типа string, а именно - только их текст. А получается, что сравнивается и регистр букв. То есть "abc"="ABC" возвращает false. Как сделать, чтобы сравнивался только текст стрингов.


 
Pasha L   (2005-06-11 01:53) [1]

Извините. Нашел lowercase;


 
Германн ©   (2005-06-11 01:59) [2]

А как сравниваешь? В этом-то и вся суть!

А "abc"="ABC"- всегда вернет False!
Легче всего при сравнении использовать функции переводящие строки в определенный вид. Либо в строчный, либо в прописной. Как правило в Делфи присутствует большей частью первый вариант.


 
Юрий Зотов ©   (2005-06-11 02:14) [3]

F1 - AnsiSameText & See also.


 
Anatoly Podgoretsky ©   (2005-06-11 08:48) [4]

Юрий Зотов ©   (11.06.05 02:14) [3]
Учитывает ли он локализацию, например железно-дорожный и железнодорожный это один и тот же текст. MS SQL делает, а вот за эту функцию не уверен.


 
Юрий Зотов ©   (2005-06-11 10:14) [5]

> Anatoly Podgoretsky ©   (11.06.05 08:48) [4]

AnsiSameText локализацию учитывает.
Только "железно-дорожный" - это не локализация а ошибка. :о)


 
Anatoly Podgoretsky ©   (2005-06-11 10:17) [6]

Юрий Зотов ©   (11.06.05 10:14) [5]
Это не ошибка, слова можно написать с тире и без, от этого суть не меняется. Я не зря привел MSSQL тот делает по полной локализации. Локализация это не только чувствительность к регистру, но и многое другое.
Приведу другой пример с телефонами
1234567
123-4567
123-45-67


 
ferr ©   (2005-06-11 10:35) [7]

function AnsiSameText(const S1, S2: string): Boolean;
begin
 Result := AnsiCompareText(S1, S2) = 0;
end;

Зачем такая избыточность?


 
-=XP=- ©   (2005-06-11 13:56) [8]

Anatoly Podgoretsky ©   (11.06.05 10:17) [6]

Это уже функция ParseMind(), но идет только с Delphi 2050.


 
-=XP=- ©   (2005-06-11 14:36) [9]

Зачем такая избыточность?

Это не избыточность.
Все для удобства программиста. ;)

Сравните:
if (<SomeCondition>) and (ANSICompareText(S1, S2) = 0) then
и
if (<SomeCondition>) and ANSISameText(S1, S2) then

Мне кажется, интуитивно понятнее второе.


 
[lamer]Barmaglot ©   (2005-06-11 23:22) [10]

Алгоритмы точного сравнения строк:
Brute Force
Automaton
Karp-Rabin
Shift Or
Morris-Pratt
Knuth-Morris-Pratt
Simon
Colussi
Galil-Giancarlo
Apostolico-Crochemore
Not So Naive
Forward Dawg Matching
Boyer-Moore
Turbo-BM
Apostolico-Giancarlo
Reverse Colussi
Horspool
Quick Search
Tuned Boyer-Moore
Zhu-Takaoka
Berry-Ravindran
Smith
Raita
Reverse Factor
Turbo Reverse Factor
Backward Oracle Matching
Galil-Seiferas
Two Way
и т.д.

p.s. Просто для того, что бы вы поняли, что здесь все не так просто как кажется :-)


 
KosilkA ©   (2005-06-11 23:59) [11]

А чем плоха Windows.CompareString ?

The CompareString function compares two character strings, using the locale specified by the given identifier as the basis for the comparison.

int CompareString(

   LCID Locale, // locale identifier
   DWORD dwCmpFlags, // comparison-style options
   LPCTSTR lpString1, // pointer to first string
   int cchCount1, // size, in bytes or characters, of first string
   LPCTSTR lpString2, // pointer to second string
   int cchCount2  // size, in bytes or characters, of second string  
  );


......

dwCmpFlags

A set of flags that indicate how the function compares the two strings. By default, these flags are not set. This parameter can specify zero to get the default behavior, or it can be any combination of the following values:

Value Meaning
NORM_IGNORECASE Ignore case.
NORM_IGNOREKANATYPE Do not differentiate between Hiragana and Katakana characters. Corresponding Hiragana and Katakana characters compare as equal.
NORM_IGNORENONSPACE Ignore nonspacing characters.
NORM_IGNORESYMBOLS Ignore symbols.
NORM_IGNOREWIDTH Do not differentiate between a single-byte character and the same character as a double-byte character.
SORT_STRINGSORT Treat punctuation the same as symbols.


...

Return Values

If the function succeeds, the return value is one of the following values:

Value Meaning
1 The string pointed to by the lpString1 parameter is less in lexical value than the string pointed to by the lpString2 parameter.
2 The string pointed to by lpString1 is equal in lexical value to the string pointed to by lpString2.
3 The string pointed to by lpString1 is greater in lexical value than the string pointed to by lpString2.


 
PsyhoBlob   (2005-06-12 03:24) [12]

Стринги бывают разных цветов да и размер тоже разный :))))


 
Anatoly Podgoretsky ©   (2005-06-12 11:50) [13]

KosilkA ©   (11.06.05 23:59) [11]
Хорошая функция, ни когда не обращал ранее на нее внимания. Это как раз то, про что говорил в [4] и в [6]



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

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

Наверх





Память: 0.48 MB
Время: 0.05 c
3-1117607493
r9000
2005-06-01 10:31
2005.07.11
Внесение текстового файла в поле базы MySQL


3-1117605470
ArkIv
2005-06-01 09:57
2005.07.11
FreeLibrary и try catch


14-1118408792
tema
2005-06-10 17:06
2005.07.11
Системы счисления...


3-1117603888
_Max
2005-06-01 09:31
2005.07.11
Слияние полей в MDB


3-1117369737
Erich
2005-05-29 16:28
2005.07.11
Ошибка при выполнении SQL запроса.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский