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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2014, 12:46   #1
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию StringReplace, нужна помощь

Всем Привет!

Код:
temp := 'begin, Sender  ,0, end';
temp := StringReplace(temp,'end','END',[rfReplaceAll, rfIgnoreCase]);
получаю: begin, SENDer ,0, END
а нужно: begin, Sender ,0, END

подскажите как можно заменить только слово целиком?

Писать свою функцию? но разделитель между словами может быть какой угодно, запятая, пробел, табуляция и т.д.

Помогите
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 12.05.2014, 12:51   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Писать свою функцию? но разделитель между словами может быть какой угодно, запятая, пробел, табуляция и т.д.
Писать. PosEx и заменять только тогда, когда справа-слева один из предусмотренных разделителей или начало-конец строки
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.05.2014, 13:07   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я бы написал свою функцию, на основе алгоритма разбора текста на отдельные слова.

Как вариант - можно попробовать применить регулярные выражения.


Цитата:
но разделитель между словами может быть какой угодно, запятая, пробел, табуляция и т.д.
да ладно! И что, разделителем между словами может быть подчёркивание? Цифра? Дефис?
Обычно поступают так: или задают набор разделителей (delimters), например,
Код:
const Delimiters = ['.',',','-',':',' ','!','?','(',')','['.']'];
и считаем словами всё, что между разделителями.
Либо, если определить набор разделителей не представляется возможным, тогда считаем словами группу символов, которые входят в заданный алфавит (описываем набор допустимых символов), тогда всё, что не входит в алфавит - это разделители.

p.s. алгоритмов(примеров) парсинга текста с выделением слов на форуме было достаточно.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2014, 13:14   #4
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Писать. PosEx и заменять только тогда, когда справа-слева один из предусмотренных разделителей или начало-конец строки
а как отловить начало и конец строки? проверять символ перед и после вхождения подстроки в строке, какие "коды" отвечают за начало и конец строки?
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!

Последний раз редактировалось spirit-ua; 12.05.2014 в 13:17.
spirit-ua вне форума Ответить с цитированием
Старый 12.05.2014, 13:20   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

индекс символа в строке равен 1 - это начало строки
индекс символа равен Length(s) - это конец строки

например, код - тыц

Последний раз редактировалось Serge_Bliznykov; 12.05.2014 в 13:23.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2014, 14:26   #6
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

сделал вот так:
Код:
 const
   Delimiters = [ '.' ,  ',' , '-' , ':' , ' ' , '!' , '?' , '(' , ')' , '[' , ']' ];
 var
   Str1, Str2, Str3 : string;
   i : integer;
   k1,k2 : integer;
 begin
   Str1 := 'begin, Sender ,0, end ,end';
   Str1 := ' ' + Str1 + ' ' ;
   Str2 := 'end';
   Str3 := 'END';

   for i:=0 to length(Str1) do
     begin
     if copy(Str1,i,length(Str2)) = Str2 then
       begin
       k1 := i-1;
       k2 := i+length(Str2);
       if (Str1[k1] in Delimiters) and (Str1[k2] in Delimiters) then
         begin
         Str1 := copy(Str1,1,k1) + Str3 + copy(Str1,k2,length(Str1));
         end;
       end;
     end;

   Str1 := Trim(Str1);
   Edit2.Text := Str1;
если есть ошибки ткните носом
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 12.05.2014, 14:44   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
если есть ошибки ткните носом
Сделай пару десятков разнообразных тестовых строк, если ошибки есть - они сами в нос ткнут
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.05.2014, 14:47   #8
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Сделай пару десятков разнообразных тестовых строк, если ошибки есть - они сами в нос ткнут
ОК

Всем Спасибо!
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 12.05.2014, 15:45   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а если в поиске пробел участвует?
eval вне форума Ответить с цитированием
Старый 12.05.2014, 16:26   #10
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
а если в поиске пробел участвует?
заменил строку
Код:
Str1 := Trim(Str1);
на
Код:
Str1 := copy(Str1,2,length(Str1)-2);
а сам пробел заменять не нужно
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringReplace Painkiller_13 Общие вопросы Delphi 11 24.12.2012 22:25
StringReplace s1s1s1 Общие вопросы Delphi 12 28.03.2011 16:26
Не заменяет StringReplace Alex Cones Общие вопросы Delphi 2 03.09.2009 21:00
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Очень нужна помощь с написанием программы... срочно(буду благодарен за помощь) 5Paladin5 Помощь студентам 3 02.07.2009 09:12