Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как сравнить 2 строки case insensitive ?  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1871
Добрый день, какой правильный способ сравнить 2 строки case insansitive ?
Надо что бы
'Папа' = 'папа'

И что бы
'Папааа'+1ГБ <> 'мамааа'+1ГБ

Как использовать IEqualityComparer, и можно ли использовать его тут ?
27 дек 18, 09:52    [21774518]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3958
AnsiCompareText
27 дек 18, 09:56    [21774522]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12671
- Luke, use ToLowerInvariant or ToUpperInvariant to compare case insensitive.


http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.SysUtils.TStringHelper
27 дек 18, 09:57    [21774523]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12671
ShowMessage('TEST'.ToLowerInvariant.Contains('t').ToString(TUseBoolStrs.True));
27 дек 18, 09:57    [21774524]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12671
http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/SysUtils_CompareText@string@string.html

CompareText compares S1 and S2 and returns 0 if they are equal. If S1 is greater than S2, CompareText returns an integer greater than 0. If S1 is less than S2, CompareText returns an integer less than 0. CompareText is not case sensitive and is not affected by the current locale.
27 дек 18, 09:59    [21774525]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1871
JaDi,

Меня пугает слово Ansi в юникоде.
27 дек 18, 10:01    [21774531]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1871
X11,

Я знал, что предложат использовать что-то ToLower.
Но использовать это нельзя.
Сначала ToLower должна перевести 2 строки по 1ГБ текста в нижний регистр, а потом увидит, что различается первый символ.
27 дек 18, 10:05    [21774535]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24745
Valery_B
Я знал, что предложат использовать что-то ToLower.
Но использовать это нельзя.
Сначала ToLower должна перевести 2 строки по 1ГБ текста в нижний регистр, а потом увидит, что различается первый символ.

Хочешь остановить прогресс? Для чего тогда наращивать гигабайты и гигагерцы?
27 дек 18, 10:26    [21774550]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1871
wadman
Хочешь остановить прогресс?

Нет. Я хочу сравнить 2 строки между собой.
27 дек 18, 10:31    [21774555]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3007
Valery_B
JaDi,

Меня пугает слово Ansi в юникоде.


Зря. Достаточно один раз кликнуть, что бы реализацию посмотреть.
27 дек 18, 10:35    [21774559]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 416
[quot makhaon]
Valery_B
JaDi,

Меня пугает слово Ansi в юникоде.


Зря.
ANSI на ASCII похоже, вот и страшно.
27 дек 18, 10:38    [21774562]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29392

27.12.2018 9:52, Valery_B пишет:

> Надо что бы
> 'Папа' = 'папа'

AnsiSameText()

Posted via ActualForum NNTP Server 1.5

27 дек 18, 10:45    [21774569]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1242
Valery_B
X11,

Я знал, что предложат использовать что-то ToLower.
Но использовать это нельзя.
Сначала ToLower должна перевести 2 строки по 1ГБ текста в нижний регистр, а потом увидит, что различается первый символ.

В лоб... переводи посимвольно и сравнивай символы... или чанками...
27 дек 18, 10:47    [21774571]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
alekcvp
Member

Откуда:
Сообщений: 1249
X11
http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/SysUtils_CompareText@string@string.html
CompareText compares S1 and S2 and returns 0 if they are equal. If S1 is greater than S2, CompareText returns an integer greater than 0. If S1 is less than S2, CompareText returns an integer less than 0. CompareText is not case sensitive and is not affected by the current locale.


Только лучше AnsiCompareText(), т.к. простой CompareText() (который без LocaleOptions) не-ascii символы сравнивает побайтно.
27 дек 18, 12:03    [21774627]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3007
[quot Фэйтл Эра]
makhaon
пропущено...


Зря.
ANSI на ASCII похоже, вот и страшно.


ANSI и ASCII соотносятся примерно так же, как канал и канализация :)
27 дек 18, 13:33    [21774713]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
Квейд
Member

Откуда: Kyiv, Ukraine
Сообщений: 5142
[quot makhaon]
Фэйтл Эра
пропущено...


ANSI и ASCII соотносятся примерно так же, как канал и канализация :)


+
как гонорея и гонорар
27 дек 18, 14:14    [21774766]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
asviridenkov
Member

Откуда:
Сообщений: 3847
AnsiSameText / AnsiCompareText те еще бомбы замедленного действия
27 дек 18, 14:19    [21774773]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10689
Valery_B
Сначала ToLower должна перевести 2 строки по 1ГБ текста
А вы переводите по 4К
27 дек 18, 15:42    [21774906]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3958
asviridenkov
AnsiSameText / AnsiCompareText те еще бомбы замедленного действия

Если работать с английский/русским текстом будут проблемы когда-нибудь?
27 дек 18, 16:03    [21774932]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
asviridenkov
Member

Откуда:
Сообщений: 3847
JaDi
asviridenkov
AnsiSameText / AnsiCompareText те еще бомбы замедленного действия

Если работать с английский/русским текстом будут проблемы когда-нибудь?


Зависит от локали в системе
27 дек 18, 16:06    [21774938]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3167
JaDi
Если работать с английский/русским текстом будут проблемы когда-нибудь?

Если строки юникодовые то не будет.
27 дек 18, 16:42    [21774984]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29392

27.12.2018 16:06, asviridenkov пишет:
> Зависит от локали в системе

только если сознательно отказаться от MBCS.

Posted via ActualForum NNTP Server 1.5

27 дек 18, 16:55    [21774997]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
rgreat
Member

Откуда:
Сообщений: 4625
Valery_B
Добрый день, какой правильный способ сравнить 2 строки case insansitive ?
Надо что бы
'Папа' = 'папа'

И что бы
'Папааа'+1ГБ <> 'мамааа'+1ГБ

Как использовать IEqualityComparer, и можно ли использовать его тут ?
Если вопрс упирается в быстродействие - сначала сравни длину строк а потом сравнивай их по частям. По 100*(номер итерации) символов, к примеру.
27 дек 18, 17:07    [21775016]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1974
rgreat
Если вопрс упирается в быстродействие - сначала сравни длину строк а потом сравнивай их по частям. По 100*(номер итерации) символов, к примеру.
Нельзя. Строки могут быть одинаковыми при разной длине. Например: Krijshof и Krijshof
27 дек 18, 17:24    [21775032]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1871
_Vasilisk_
А вы переводите по 4К

rgreat
Если вопрс упирается в быстродействие - сначала сравни длину строк а потом сравнивай их по частям. По 100*(номер итерации) символов, к примеру.

Вопрос - т.е. сравнение case insensitive я должен писать с нуля?

На C# пишется так:
var s = "Всем Привет";
if (s.Equals("всем привет", StringComparison.InvariantCultureIgnoreCase) == true)
    return "equal";
else
    return "not equal";

Результат:
equal
27 дек 18, 17:27    [21775038]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить