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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2013, 22:27   #1
влад1991
 
Регистрация: 16.01.2013
Сообщений: 8
По умолчанию вырезать часть строки

Подскажите плз новичку - как извлечь фрагмент строки произвольной длины(строка записанна в memo), заключённый между двумя словами "Слово1" и "Слово2"....и присвоить эпеременной значение этой вырезанной строки! заранее спасибо)
влад1991 вне форума Ответить с цитированием
Старый 13.04.2013, 22:37   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

1. Узнать позицию конца слова1 и позицию начала слова2.
2. Получить подстроку с помощью функции copy
Вадим Мошев вне форума Ответить с цитированием
Старый 13.04.2013, 22:46   #3
влад1991
 
Регистрация: 16.01.2013
Сообщений: 8
По умолчанию

Дело в том что позицию узнать не так просто-т.к. строчка все время разной длины

надо по словам разделителям смотреть

я пробовал так

Код:
procedure TForm1.Button6Click(Sender: TObject);
 var
  s: string;

  m,m2,n,n2: string;


begin
    m:=memo1.Text;
    m2 := Copy (m,1,Pos(' nodes',m)-1);

      n:=memo1.Text;
    n2 := Copy (n,1,Pos(' mode',n)-1);
s :=Copy(m,n);
    memo2.Text:= s;
end;
но так не работает

можно вывести так
s :=Copy(m,Pos('nodes',m)+7,Length(m) );
Но тогда только начало обрезает, а концовку нет..а мне надо чтоб именно часть строки между этих слов)

Последний раз редактировалось Stilet; 13.04.2013 в 23:16.
влад1991 вне форума Ответить с цитированием
Старый 13.04.2013, 22:56   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Примерно так:
Код:
k:=Pos('nodes',m)+7;
s :=Copy(m,k,Pos('mode',m)-k);
Если есть уверенность, что слово mode строго после слова nodes.

Иначе придется использовать Posex (http://programmersforum.ru/showpost....91&postcount=4).

UPD
Пожалуйста

На будущее - редактируйте свое последнее сообщение, а не плодите подряд несколько сообщений.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 13.04.2013 в 23:18.
BDA вне форума Ответить с цитированием
Старый 13.04.2013, 23:02   #5
влад1991
 
Регистрация: 16.01.2013
Сообщений: 8
По умолчанию

да mode полюбому после слова nodes


сейчас попробую

Все получилось! большое спасибо!))

Блин , не могу понять почему не работает:
Код:
procedure TForm1.Button5Click(Sender: TObject); //СТРОИМ ТАБЛИЦУ!
var
  k,n:integer;
  s,m:string;
  L : TStringList;

begin
  m:=memo1.Text;
  n:=Pos('nodes',m)+7;
  s :=Copy(m,n,Pos('mode',m)-n);
  memo2.Text:= s;

     L := TStringList.Create;
  try
    L.CommaText := StringReplace(s, '-', ',', [rfReplaceAll]);
    i := 0;
    repeat
      StringGrid1.Cells[StrToInt(L[i]), StrToInt(L[i + 1])] := MidStr(L[i + 2], 2, Length(L[i + 2]) - 2);
      Inc(i, 3);
    until i >= L.Count;
  finally
    L.Free;
  end;



 end.
подскажите плиз че не так)

Последний раз редактировалось Stilet; 14.04.2013 в 10:12.
влад1991 вне форума Ответить с цитированием
Старый 13.04.2013, 23:33   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а что не работает-то?
eval вне форума Ответить с цитированием
Старый 14.04.2013, 00:19   #7
влад1991
 
Регистрация: 16.01.2013
Сообщений: 8
По умолчанию

оно должно автоматически по нажатию на кнопку таблицу заполнять- а не заполняет выскакивает ошибка

пишет:

progect 1.exe raised exception class EStringListError width message 'List index out of bounds 9125)'. Process stopped.

Последний раз редактировалось Stilet; 14.04.2013 в 10:21.
влад1991 вне форума Ответить с цитированием
Старый 14.04.2013, 00:33   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

А так?
Код:
i := 2;
while i < L.count do
begin
  StringGrid1.Cells[StrToInt(L[i - 2]), StrToInt(L[i - 1])] := MidStr(L[i], 2, Length(L[i]) - 2);
  Inc(i, 3);
end;
UPD
Пожалуйста

На будущее - редактируйте свое последнее сообщение, а не плодите подряд несколько сообщений.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 14.04.2013 в 00:48.
BDA вне форума Ответить с цитированием
Старый 14.04.2013, 00:34   #9
влад1991
 
Регистрация: 16.01.2013
Сообщений: 8
По умолчанию

Пишет:
progect 1 .exe raised exception class ESTringListError with message 'List index out of bounds (125) ' Process stopped.

ща попробую

да заработало!) ура!) спасибо-очень признателен!

Последний раз редактировалось Stilet; 14.04.2013 в 10:22.
влад1991 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Flash Вырезать часть изображения demon112 Общие вопросы Web 1 09.04.2013 15:54
Вырезать символы из строки hon PHP 4 22.03.2013 20:06
Как вырезать часть изображения ZelenuiBeret Visual C++ 0 27.01.2013 23:52
Вырезать часть строки montreyka Общие вопросы Delphi 4 26.03.2012 22:40
Вырезать часть строки. sergeyrulit Общие вопросы Delphi 2 22.10.2010 22:25