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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2011, 18:27   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос "Кусочная" замена текста в тексте

Добрый вечер! Не знал как правильно дать название теме. Суть такая. Есть некий текст, в котором есть два слова: "№" и "от". Нужно найти эти слова в тексте, взять следующее, через пробел от них слова, и поменять местами. Например:
"тут какой-то текст 123 от 20.10.2011 и так далее"
должно получиться так:
"тут какой-то текст от 20.10.2011 123 и так далее".
Как можно реализовать это?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 06.07.2011, 18:56   #2
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Код:
function StrReplace(const S1, S2, InputStr: String): String;
var i, j : Integer;
    tS1, tS2, tS3 : String;
begin
  Result := InputStr;
  i := pos(S1, InputStr);
  j := pos(S2, InputStr);
  if (i > 0) AND (j > 0) then
  begin
    tS1 := Copy(InputStr, i, j-i);
    tS2 := Copy(InputStr, 1, i -1);
    i := j;
    for j := i + length(S2) + 1 to length(InputStr) do
     if InputStr[j] = ' '  then
       begin
         tS3 := Copy(InputStr, i, j - i + 1);
         Result := Copy(InputStr, j, length(InputStr));
         Break;
       end;
    Result := tS2 + tS3 + tS1 + Result;
  end;
end;
Пользоваться так : NewStr := StrReplace('№', 'от', OldStr);
Вариант не идеальный, но со своей задачей справляется.
_Engine_ вне форума Ответить с цитированием
Старый 06.07.2011, 20:29   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от _Engine_ Посмотреть сообщение
Пользоваться так : NewStr := StrReplace('№', 'от', OldStr);
Вариант не идеальный, но со своей задачей справляется.
Большой минус - если первый 'от' встретится раньше '№'
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.07.2011, 21:49   #4
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

этот минус легко исправим добавлением в if ... and (i > j)
хотя, посмотрев внимательнее на вышеуказанную функцию, вижу еще, как минимум два недостатка .

Я не говорил, что нужно тупо скопипастить мое решение. Я лишь только указал направление для решения. Всетаки человек с дипломом, разберется.

Последний раз редактировалось artemavd; 07.07.2011 в 14:14.
_Engine_ вне форума Ответить с цитированием
Старый 06.07.2011, 22:46   #5
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

метод Replace
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 06.07.2011, 22:50   #6
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

О, а что это за метод? Может Вы имели ввиду StringReplace, ну так приведите свою реализацию решения.
_Engine_ вне форума Ответить с цитированием
Старый 07.07.2011, 02:25   #7
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Цитата:
Сообщение от _Engine_ Посмотреть сообщение
О, а что это за метод?
http://www.delphisources.ru/pages/fa..._replace2.html

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 07.07.2011, 02:58   #8
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Код:
function GetStr(const AllStr: string; Sub1: string = '№'; Sub2: string = 'от'): string;
var
  Str, A, B, Value1, Value2: string;
  Pos1: Integer;
begin
  Str := AllStr;

  Pos1 := Pos(Sub1, Str);

  if Pos1 = 0 then
    raise Exception.Create('Не найдена 1 строка');

  // Получение 1-ой части строки
  A := Trim(Copy(Str, 1, Pos1 - 1));

  Delete(Str, 1, Pos1);
  Str := Trim(Str);

  Pos1 := Pos(Sub2, Str);

  if Pos1 = 0 then
    raise Exception.Create('Не найдена 2 строка');

  Value1 := Trim(Copy(Str, 1, Pos1 - 1));

  Delete(Str, 1, Pos1 - 1 + Length(Sub2));
  Str := Trim(Str);

  Pos1 := Pos(' ', Str);

  if Pos1 = 0 then
    raise Exception.Create('Error Message');
    
  Value2 := Trim(Copy(Str, 1, Pos1 - 1));
  Delete(Str, 1, Pos1);

  B := Trim(Str);
  Result := A + ' ' + Sub2 + ' ' + Value2 + ' ' + Sub1 + ' ' + Value1 + ' ' + B; 
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetStr('тут какой-то текст № 123 от 20.10.2010 и так далее'));
end;
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 07.07.2011, 08:46   #9
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Можно самым примитивным способом
Код:
procedure TForm1.Button1Click(Sender: TObject);
var s,s1,s2,s3: string;
    i:integer;
begin
 s:='тут какой-то текст № 123 от 20.10.2011 и так далее';
 s1:=Copy(s,1,Pos('№',s)-1);
 Delete(s,1,Pos('№',s)-1);
 s2:=Copy(s,1,Pos('от',s)-1);
 Delete(s,1,Pos('от',s)+2);
 s3:='от '+Copy(s,1,Pos(' ',s));
 Delete(s,1,Pos(' ',s));
 s:=s1+s3+s2+s;//результат
end;
//прикольная у тебя репутация

Последний раз редактировалось artemavd; 07.07.2011 в 14:15.
SERG1980 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
Проверьте правописание "ча" и "ща" в тексте. zephiroth Паскаль, Turbo Pascal, PascalABC.NET 2 25.04.2010 13:51
Создать кнопку "Замена" выделенного текста natsik'09 Помощь студентам 4 21.04.2010 20:32
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04