Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.03.2012, 12:31
Pcrepair
 
Сообщения: n/a
По умолчанию TStringList и перевод символов в нижний регистр

Добрый день. В программе для хранения и обработки текстов используется ПЕРЕМ типа TStringList
Для сравнения текстов необходимо все символы привести к нижнему регистру.
Вопрос:
1. небходимо ли приводить символы к нижнему регистру при использовании Pos
2. если необходимо, то как это сделать применительно к TStringList,
T2 := AnsiLowerCase(T2); для Т2:TStringList не работает.
Всем ответившим - спасибо
добавлю:
РАД2010 и преобразовать нужно сразу все строки в ПЕРЕМ

Последний раз редактировалось Pcrepair, 24.03.2012 в 12:44.
Ответить с цитированием
  #2  
Старый 24.03.2012, 12:56
nixel nixel вне форума
Начинающий
 
Регистрация: 12.12.2011
Адрес: Москва
Сообщения: 150
Версия Delphi: XE2-U4
Репутация: 131
По умолчанию

AnsiLowerCase принимает в качестве параметра строку. Если через него нужно привести к нижнему регистру stinglist, то надо перебирать все строки.
если не ошибаюсь, примерно так:
Код:
for i:=0 to (Count - 1) do
  T2.Strings[i]:= AnsiLowerCase(T2.Strings[i]); //исправил, была ошибка. 


Естественно, если в стринглисте ansi-строки =) для юникод-строк (и для обычных string после 2009 делфи, т.к. они стали юникодными по умолчанию) код аналогичен с использованием LowerCase вместо AnsiLowerCase.

Добавлено:
По поводу вопроса 1. Да, необходимо, так как Pos ищет символ с конкретным кодом, а для верхнего и нижнего регистров коды разные. Как обходной вариант, можно использовать LowerCase внутри самого Pos. Тогда изначальный stringlist останется без изменений. пример:
Код:
Pos(LowerCase('Подстрока'), LowerCase('Строка в которой нужно найти последовательность подстрока')); 

Последний раз редактировалось nixel, 24.03.2012 в 13:06.
Ответить с цитированием
  #3  
Старый 24.03.2012, 13:14
Pcrepair
 
Сообщения: n/a
По умолчанию

вообще немного попроще получилось
T2.Text := AnsiLowerCase(T2.Text);
а
T2.Text := LowerCase(T2.Text); почемуто ничего не делает, хотя РАД2010

в Pos нет случайно возможности поиска по частичному совпадению
ну например
маразм и маразматик
Ответить с цитированием
  #4  
Старый 24.03.2012, 13:30
nixel nixel вне форума
Начинающий
 
Регистрация: 12.12.2011
Адрес: Москва
Сообщения: 150
Версия Delphi: XE2-U4
Репутация: 131
По умолчанию

Цитата:
Сообщение от Pcrepair
вообще немного попроще получилось
T2.Text := AnsiLowerCase(T2.Text);
а
T2.Text := LowerCase(T2.Text); почемуто ничего не делает, хотя РАД2010
Да, про эту возможность я не подумал =)
Возможно в стринглисте ansi-строки, поэтому юникод-аналог процедуры не работает или работает некорректно.
Цитата:
Сообщение от Pcrepair
в Pos нет случайно возможности поиска по частичному совпадению
ну например
маразм и маразматик
так Pos так и работает. Он возвращает номер символа, с которого началось совпадение. Например Pos('аз', 'Маразматик'); вернет 4.
Ответить с цитированием
  #5  
Старый 26.03.2012, 09:39
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
AnsiCompareText function
Compares strings based on the current locale without case sensitivity.
Unit
SysUtils
Delphi syntax:
function AnsiCompareText(const S1, S2: string): Integer;
Description
AnsiCompareText compares S1 to S2, without case sensitivity. The compare operation is controlled by the current locale. AnsiCompareText returns a value less than 0 if S1 < S2, a value greater than 0 if S1 > S2, and returns 0 if S1 = S2.
--------->
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:10.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter