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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2011, 19:15   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос Найти без учёта регистра

Код:
var
  s1, s2, s3: string;
  a, b: Integer;
  TSL: TStringList;
begin
  // Что ищем
  s2 := '007';
  // Чем заменяем
  s3 := '***';
  
  TSL := TStringList.Create;
  TSL.LoadFromFile('test.txt');

  b := 0;

  for a := TSL.Count - 1 downto 0 do
  if s2 = trim(TSL[a]) then
  begin
    TSL.Strings[a] := s3;
    b := b + 1;
  end;

  if b = 0 then Label1.Caption := 'Совпадений не найдено' else Label1.Caption := 'Произведено ' + IntToStr(b) + ' замен "' + s2 + '" на "' + s3 + '"';
  TSL.SaveToFile('test1.txt');
  TSL.Free;
Из
007
"007"
*007*
[007]
производится замена на *** только 007. Как сделать чтобы все 007 были заменены на *** и на выходе получилось
***
"***"
*****
[***]
Shouldercannon вне форума Ответить с цитированием
Старый 26.04.2011, 20:57   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
for a := TSL.Count - 1 downto 0 do begin
  s:=TSL.Strings[a];
  i:=Pos(AnsiUpperCase(s2),AnsiUpperCase(s));
  while i>0 do begin
    s:=Copy(s,1,i-1)+s3+Copy(s,i+Length(s2),Length(s)-i-Length(s2)+1);
    TSL.Strings[a]:=s;
    Inc(b);
    i:=Pos(AnsiUpperCase(s2),AnsiUpperCase(s));
  end;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 26.04.2011 в 21:02.
Аватар вне форума Ответить с цитированием
Старый 26.04.2011, 22:17   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

не разберусь, что отсюда убрать, чтобы просто выполнить подсчёт совпадений
Код:
    s:=Copy(s,1,i-1)+s3+Copy(s,i+Length(s2),Length(s)-i-Length(s2)+1); // без зависает
    TSL.Strings[a]:=s; // скорее всего это
    Inc(b); // не трогаем подсчёт
    i:=Pos(AnsiUpperCase(s2),AnsiUpperCase(s)); // без зависает
Shouldercannon вне форума Ответить с цитированием
Старый 26.04.2011, 22:34   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

TSL.Strings[a]:=s; // скорее всего это
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.04.2011, 23:30   #5
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Радость

Код:
b := 0; // Нужно обязательно

for a := TSL.Count - 1 downto 0 do begin
  s:=TSL.Strings[a];
  i:=Pos(AnsiUpperCase(s2),AnsiUpperCase(s));
  while i>0 do begin
    s:=Copy(s,1,i-1)+s3+Copy(s,i+Length(s2),Length(s)-i-Length(s2)+1);
    Inc(b);
    i:=Pos(AnsiUpperCase(s2),AnsiUpperCase(s));
  end;
end;
Shouldercannon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pos без учёта регистра fezilk25 Общие вопросы Delphi 1 08.02.2011 23:11
проверка без регистра Артэс Общие вопросы C/C++ 10 24.11.2009 19:53
Поиск без учета регистра Cartman18 БД в Delphi 2 15.10.2009 15:18
Lookup без учета регистра ИВАНьКа Общие вопросы C/C++ 1 30.08.2009 12:48
Поиск без учёта регистра Маркъ Общие вопросы Delphi 4 15.03.2007 19:28