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

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

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

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

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

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

Откуда: Kharkiv, Ukraine
Сообщений: 12997
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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

Откуда:
Сообщений: 1368
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
Сообщений: 3227
[quot Фэйтл Эра]
makhaon
пропущено...


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


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

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


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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

Откуда: Москва
Сообщений: 1935
_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 Ответить