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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2010, 22:08   #1
saggy
Форумчанин
 
Регистрация: 08.10.2009
Сообщений: 112
Вопрос Выделение текста по количеству повторов

Название тяжкое, но попытаюсь объяснить:
Есть s := '[яблоко]+[груша]+[яйцо]'
Я хочу написать функцию, которая выделила бы мне текст в квадратных скобках по их порядку, т.е.:
Getstr(s,'[',']',2) = 'груша';
Где первая переменная - общая строка, вторая - символ перед выделяемой областью, третья - соответственно - символ после выделяемой области, и последняя переменная - это номер скобок. Если номер выбран 2, значит результат должен быть из вторых скобок.
Сам пробовал подумать, но подкипали извилины. Помогите, буду благодарен.
procedure life; for years := 1 to 11 do gotoschool(normal); woman := TMan.add; childrens.add(TMans); problems.add(fuck); woman.destroy; END.

Последний раз редактировалось saggy; 09.03.2010 в 22:11.
saggy вне форума Ответить с цитированием
Старый 09.03.2010, 22:11   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

либо удаляйте уже использованный кусок текста либо PosEx в помощь
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.03.2010, 10:33   #3
Mikl69
Новичок
Джуниор
 
Регистрация: 08.10.2009
Сообщений: 1
По умолчанию

Я не профессионал в программировании, но сделал бы так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
isxstr, s1str, s2str, s1, s2:string;
S1Array: Array[1..256] of integer; // массив куда запишем все [ 
S2Array: Array[1..256] of integer;  // массив куда запишем все ]
s1ch,s2ch,para:integer;
begin
isxstr:='[яблоко]+[груша]+[яйцо]';
s1str:=isxstr;
s2str:=isxstr;
s1:='[';
s2:=']';
s1ch:=1;
s2ch:=1;
para:=2; // как пример вывести символы из 2 пары
// para:=strtoint(Edit1.text);
// нахожу все символы [  (s1)
Repeat
  if s1ch=1 then S1Array[s1ch]:=Pos(s1,s1str);
  if s1ch>1 then S1Array[s1ch]:=Pos(s1,s1str)+S1Array[s1ch-1];
  if s1ch=1 then Delete(s1str,1,S1Array[s1ch]);
  if s1ch>1 then Delete(s1str,1,S1Array[s1ch]-S1Array[s1ch-1]);
  Edit6.Text :=s1str;
  inc(s1ch);
until Pos(s1,s1str)=0   ;
// нахожу все символы ]  (s2)
Repeat
  if s2ch=1 then S2Array[s2ch]:=Pos(s2,s2str);
  if s2ch>1 then S2Array[s2ch]:=Pos(s2,s2str)+S2Array[s2ch-1];
  if s2ch=1 then Delete(s2str,1,S2Array[s2ch]);
  if s2ch>1 then Delete(s2str,1,S2Array[s2ch]-S2Array[s2ch-1]);
  Edit6.Text :=s2str;
  inc(s2ch);
until Pos(s2,s2str)=0  ;
// вывожу все что находиться между нужной парой символов
if para<=s1ch-1 then begin
  ShowMessage(Copy(isxstr,S1Array[para]+1,S2Array[para]-S1Array[para]-1));
end
else
ShowMessage('Не нашлось такой пары символов. Максимальное значение пары=' +
            inttostr(s1ch-1));
end;

Последний раз редактировалось Mikl69; 11.03.2010 в 10:36.
Mikl69 вне форума Ответить с цитированием
Старый 11.03.2010, 12:26   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Ну зачем так? Пепел Феникса уже показал куда копать
Код:
function Getstr(s, a, b: string; n: integer): string;
var
  i, k: integer;
begin
  result := 'error';
  k := 1;
  i := pos(a, s);
  while (i > 0) and (k < n) do begin
    inc(k);
    i := posEx(a, s, i + 1)
  end;
  k := posEx(b, s, i + 1);
  if i * k <> 0 then
    result := copy(s, i + 1, k - i - 1)
end;
eoln вне форума Ответить с цитированием
Старый 12.03.2010, 14:23   #5
saggy
Форумчанин
 
Регистрация: 08.10.2009
Сообщений: 112
По умолчанию

Спасибо вам за коды!!!
а то мне обычно пишут: "ты чайник", "у тебя ошибки в словах", "ты пишешь с маленькой буквы", "всё неправильно" и на этом заканчивается.
спасибо!!

Это пишут на других форумах, не так ли ?
Модератор.
procedure life; for years := 1 to 11 do gotoschool(normal); woman := TMan.add; childrens.add(TMans); problems.add(fuck); woman.destroy; END.

Последний раз редактировалось mihali4; 12.03.2010 в 15:15.
saggy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Убрать выделение текста Михаил Юрьевич Общие вопросы Delphi 3 21.12.2009 19:56
Выделение текста Sensizu Компоненты Delphi 0 01.10.2009 19:09
Выделение текста Rebel123 Общие вопросы Delphi 11 31.08.2009 17:12
Выделение текста Kib Общие вопросы Delphi 3 07.07.2009 12:12
Выделение текста max38934 JavaScript, Ajax 5 26.05.2009 14:16