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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2011, 17:41   #1
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию Удаление с переменной.

Подскажите пожалуйста каким образом если в переменной есть <dsflj>, то все что в <> и сами эти стрелочки необходимо удалить.

Последний раз редактировалось celovec; 07.04.2011 в 17:58.
celovec вне форума Ответить с цитированием
Старый 07.04.2011, 17:58   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

эмм, по понятней нельзя было?

я предпологаю это так:
Код:
procedure dosmth;
var
   p:integer;
   s:string;
begin
p:=AnsiPos('<dsflj>',s);
   if p > 0 then
   begin
   Delete(s,p,Length('<dsflj>'));
   ShowMessage(s);
   end;
end;
Человек_Борща вне форума Ответить с цитированием
Старый 07.04.2011, 18:00   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Код:
const
  c_str_to_remove = '<dsflj>';
var
  p: integer;
  s: string;
begin
  repeat
    //
    p := Pos(c_str_to_remove, s);
    if (1 <= p) then
      Delete(s, p, length(c_str_to_remove));
    else
      break;
    //
  until (false);
end;
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 07.04.2011, 18:01   #4
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию

dsflj - это может менятся. там могут быть разные символы. Я помню как-то это в одну строчку делал... Но не могу вспомнить как именно.

Пример: Андрей <b> Зайцев.

в данном случае <b> нужно удалить.
celovec вне форума Ответить с цитированием
Старый 07.04.2011, 18:18   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Проще простого:
Код:
procedure TMainForm.Button1Click(Sender: TObject);
const
  s = 'This is <B4564fhfghdfgdfg> String';
  O = '<';
  C = '>';
var
  startP, endP: Integer;
  ts, ts1: string;
begin
  //ищем откр. ковычку
  startP := AnsiPos(o, s);
  //Ищем закр. ковычку
  endP := AnsiPos(c, s);
  //Копируем от начала строки до позиции откр. ковычки - сама коваычка
  ts := Copy(s, 0, startP - 1);
  //Копируем с позиции закр. ковычки+сама ковычка на всю длинну строки
  ts1 := Copy(s, endP + 1, Length(s));
  //показываем результат
  ShowMessage(ts + ts1);
end;
veniside, почему исп. repeat until?
Человек_Борща вне форума Ответить с цитированием
Старый 07.04.2011, 18:20   #6
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Код:
var
  s: string;

  s := 'Андрей <b> Зайцев';

while Pos('<',s)<>0 do
  Delete(s,Pos('<',s),Pos('>',s) - Pos('<',s) + 1);
Удалит все "<>" и текст внутри них.
W0LF вне форума Ответить с цитированием
Старый 07.04.2011, 18:23   #7
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию

Всем спасибо.

Последний раз редактировалось celovec; 07.04.2011 в 18:25.
celovec вне форума Ответить с цитированием
Старый 14.04.2011, 16:24   #8
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию

Воспользовался примером от W0LF,
Код:
var
  s: string;

  s := 'Андрей <b> Зайцев';

while Pos('<',s)<>0 do
  Delete(s,Pos('<',s),Pos('>',s) - Pos('<',s) + 1);
Но что странно. Иногда насколько я понял когда в <*> слишком много текста программа грузит ЦПУ на 80% в таком состояние проводит все оставшееся время, пока не выключишь.

в "s" переменной может быть до 300 символов. Сейчас заметил иногда конец переменной может заканчиваться так "текст < другой текст" то есть нет ">". Возможно из за этого глючит? Помогите пожалуйста разобраться.
celovec вне форума Ответить с цитированием
Старый 14.04.2011, 18:50   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
Сейчас заметил иногда конец переменной может заканчиваться так "текст < другой текст" то есть нет ">". Возможно из за этого глючит?
ИМЕННО.
если нет закр скобки. Мы ничего не удаляем и все время находим ОДНУ и ту же октр. скобку. т.е. имеем бесконечный цикл.

Код:
k:=pos('<',s);
while K>0 do begin
  kk:=pos('>',s);
  if kk<=0 then kk:=length(s);//удалить все до конца
  if kk<=0 then break; //отавить и закончить
  delete(s, k, kk-k+1);
  k:=pos('<',s);
end;
а еще мы МОЖЕМ найти закр. скобку ДО откр. скобки.
текст > новый текст < code >
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 14.04.2011 в 18:54.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объявление переменной Palomnik1096 Microsoft Office Excel 2 27.03.2011 17:43
Адрес переменной kostyan777 Общие вопросы C/C++ 4 11.07.2010 22:16
Присвоение переменной gajubas PHP 1 21.04.2010 20:18
Имя переменной как переменная. Как получить доступ к такой переменной? Denni Microsoft Office Access 8 02.04.2009 10:06
Работа с файлами (создание, удаление, открытие, связываение с переменной, очищение памяти переменной) Arkuz Общие вопросы Delphi 12 25.09.2007 20:47