Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Такой простой цикл и не работает...


Автор: rutiger 26.8.2006, 15:55
Код

procedure TForm1.Button3Click(Sender: TObject);
var n,i: integer;
    qwer, qq: string;

begin
  for n:=0 to 50 do
    begin
    qwer:=edit1.Text;
    qq:=memo1.Lines.Strings[n];
    i:=pos(qwer,qq);
    memo2.Lines.Strings[n]:=inttostr(i);
    end;
end.

Нужно чтобы memo2 заполнялся номерами позиций . Каждая новая на новой строке.
Вроде просто, а он только в первой строке ищет....
Ума не приложу. smile 

Ребят, помогите старому программисту ! smile 

Автор: volvo877 26.8.2006, 16:05
rutiger,
а у тебя что, в Memo2 уже есть столько же строк, сколько и в Memo1?
Так попробуй:
Код
memo2.Clear;
for n:=0 to memo1.Lines.Count - 1 do begin
  qwer:=edit1.Text;
  qq:=memo1.Lines.Strings[n];
  i:=pos(qwer,qq);
  memo2.Lines.Add(inttostr(i));
end;

Автор: rutiger 26.8.2006, 16:13
Спасибо большое за помощь!


 smile 

Автор: VAngeL86 26.8.2006, 16:32
На сколько я понял у тебя есть текст из 51 строки записанный в Memo1. В нем нужно найти позиции в которых встречается слово из Edit1. Вывести номера позиций нужно в Memo2?

Цитата(rutiger @  26.8.2006,  15:55 Найти цитируемый пост)
    memo2.Lines.Strings[n]:=inttostr(i);

Так можно делать только если у тебя уже есть n-я "линия" в Memo! Нужно так:
Код

   memo2.Lines.Add(inttostr(i));

Перед циклом удали все строки из Memo при помощи процедуры Memo2.Clear

P.S. Не забудь что pos ищет лишь первое попавшееся совпадение! Т.е. pos('1', '1001') найдёт тебе лишь первую единицу!

Парпдон....видно страничка долго грузилась...ответа не заметил!

Автор: rutiger 26.8.2006, 16:35
Ага , спасибо !
А как найти исчо и вторую единицу ?
Я , так понял, что простого оператора нет, и нужно что то придумывать ...
Или есть ?

Автор: VAngeL86 26.8.2006, 16:47
На сколько я знаю, процедуры другой нет....
Нужно подумать....

Добавлено @ 16:58 
Можно вот так:
Код

var n,i, sdvig: integer;
    qwer, qq, i_str: string;
begin
 Memo2.Clear;

  for n:=0 to Memo1.Lines.Count-1 do
    begin
    qwer:=edit1.Text;
    qq:=memo1.Lines[n];
    i_str:='';
    sdvig:=0;

    while pos(qwer, qq)<>0 do
    begin
     i:=pos(qwer, qq);
     i_str:=i_str + IntToStr(i + sdvig) + ' ';
     delete(qq, i, length(qwer));
     sdvig:=sdvig + length(qwer);
    end;
      
     if i_str = '' then i_str:='0';
      memo2.Lines.Add(i_str);
    end;
end;

Автор: volvo877 26.8.2006, 17:03
Цитата(rutiger @  26.8.2006,  16:35 Найти цитируемый пост)
А как найти исчо и вторую единицу ?

Код
procedure TForm1.Button1Click(Sender: TObject);
var
  qq, qwer, positions: string;
  i, p, n: integer;

begin
  memo2.Clear;
  for n:=0 to memo1.Lines.Count - 1 do begin

    qwer:=edit1.Text;
    qq:=memo1.Lines.Strings[n];
    p := 1; positions := '';
    repeat
      i:=pos(qwer,copy(qq, p, length(qq)));
      if i > 0 then begin
        p := p + i;
        positions := positions + inttostr(p - 1) + ' ';
      end;
    until i = 0;

    if positions = '' then positions := '0';
    memo2.Lines.Add(positions);

  end;

end;
Этот код найдет все заданные символы в строке...

Добавлено @ 17:04 
VAngeL86, а если нет НИ ОДНОЙ единицы, что будет?

Автор: VAngeL86 26.8.2006, 17:07
volvo877, Пустую строку выдаст! smile ...щас изменю!

...изменил!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)