Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2013, 21:05   #1
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию Преобразовать строку к нижнему/верхнему регистру

Делфи ХЕ3. Стринги стали юникодовыми и потому столкнулся с банальной проблемой. Мне нужно сравнить две строки без учета регистра. Какую функцию заюзать?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 03.08.2013 в 21:11.
Utkin вне форума Ответить с цитированием
Старый 03.08.2013, 21:10   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

function AnsiSameText(const S1, S2: string): Boolean;
Вадим Мошев вне форума Ответить с цитированием
Старый 03.08.2013, 21:14   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Напомню на всякий случай строки юникодовы.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 03.08.2013, 21:15   #4
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Хм... а это не работает для юникодовых строк?

может, поможет преобразование строк между регистрами?
Цитата:
функция AnsiLowerCase(const S: String): String
Возвращает строку S, преобразованную к нижнему регистру.
Цитата:
функция AnsiUpperCase(const S: String): String
Возвращает строку S, преобразованную к верхнему регистру
Источник: http://www.delphi-manual.ru/work-with-strings.php

Последний раз редактировалось Вадим Мошев; 03.08.2013 в 21:18.
Вадим Мошев вне форума Ответить с цитированием
Старый 03.08.2013, 21:20   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Стринги стали юникодовыми и потому столкнулся с банальной проблемой. Мне нужно сравнить две строки без учета регистра.
Не улавливаю связи.

Что мешает:
CompareStr(LowerCase(1),LowerCase(2 )) = 0 ?

Для декодирования строк используйте TEncoding.

Последний раз редактировалось Человек_Борща; 03.08.2013 в 21:25.
Человек_Борща вне форума Ответить с цитированием
Старый 03.08.2013, 21:21   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ansi не совместим с UTF.
Спасибо за участие, нужно было заюзать строковой хелпер. В нем есть методы преобразования и к верхнему и к нижнему регистру
Цитата:
LowerCase
Я не знаю корректна ли она с юникодовыми строками. Эмбекадеро клянется что старые функции должны работать, но когда происходит преобразование спецсимволов типа перевода строки результат иногда содержит лишние символы. Но все равно спасибо за предложенный вариант.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 03.08.2013 в 21:25.
Utkin вне форума Ответить с цитированием
Старый 03.08.2013, 21:38   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Вот вам перевод ANSI к UNICODE
Код:
function AnsiStr2Str(const aStr: AnsiString): string;
begin
  Result := StringOf(TEncoding.Convert(TEncoding.ANSI, TEncoding.Unicode, BytesOf(aStr)));
end;
Человек_Борща вне форума Ответить с цитированием
Старый 04.08.2013, 00:13   #8
Троллинг
Новичок
Джуниор
 
Регистрация: 03.08.2013
Сообщений: 6
По умолчанию

Цитата:
Делфи ХЕ3. Стринги стали юникодовыми и потому столкнулся с банальной проблемой. Мне нужно сравнить две строки без учета регистра. Какую функцию заюзать?
Пример1.
if widelowercase('str1')=widelowercase ('str2') then
...

вместо widelowercase сойдет в принципе и ansilowercase. Но никак не lowercase, она обрабатывает только семибитный текст.

пример2.

if lstrcmpi(pchar('str1'),pchar('str1' ))=0 then
...
Можно заблокировать тролля, но нельзя забанить троллинг, ибо это не причина, а следствие.
Троллинг вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразовать строку в число hon Паскаль, Turbo Pascal, PascalABC.NET 4 10.10.2012 18:44
Преобразовать строку с функцией в делегат FiloXSee C# (си шарп) 1 08.10.2012 13:35
Как переменную преобразовать в строку? clever77 Microsoft Office Excel 10 16.05.2011 10:23
Привод к нижнему регистру Алексей Егораев Помощь студентам 0 02.03.2011 17:18
столбец преобразовать в строку 0mega Microsoft Office Excel 6 03.02.2010 07:29