2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Memo - обробка текста
Сообщение25.04.2009, 16:39 
Текст состоит из предложений, которые заканчиваются точкой.в одном рядке может находится пару предложений или одно может занимать несколько рядков! все слова разделены пробелами!

Есть текст(MEMO1) в котором есть предложения, которые заканчиваются "!".Нужно вывести в MEMO2 все прежложения с таким окончанием.
вот то что я начудил


Код:
for i:=0 to Memo1.Lines.Count-1 do begin
if Pos('.',Memo1.Lines.Strings[i])>0 then begin
Memo1.selstart:=0;
Memo1.sellength:=length(Memo1.text);
memo1.setFocus;
memo2.Text:=copy(Memo1.Lines.Strings[i],pos('.',Memo1.Lines.Strings[i])+1,
pos('!',Memo1.Lines.Strings[i])-pos('.',Memo1.Lines.Strings[i]));
exit;


в моем коде оно копирует только после первой точки и до первого "!" и то только в одной строке. как зделать что бы находила все соответствия условию. очень прошу помочь - срочно!!! :-(

 
 
 
 
Сообщение25.04.2009, 19:25 
Код:
begin
  i:=1;
  k:=0;
  For i:=1 to Length(Memo1.Text) do begin
    if memo1.Text[i]='!' then begin
      Memo2.Text:=Memo2.Text+Copy(Memo1.Text,(i-k)+1,k);
      k:=0;
    end;
    if Memo1.Text[i]='.' then k:=0;
    if Memo1.Text[i]<>'!' then k:=k+1;

  end;

end;

;)

Добавлено спустя 1 минуту 31 секунду:

ваш код не смотрел, что-то слишком наворочено.

Добавлено спустя 16 минут 57 секунд:

даже так, если первое предложение с восклицательным знаком вдруг будет.
Код:
begin
  k:=1;
  a:=0;
  For i:=1 to Length(Memo1.Text) do begin
    if memo1.Text[i]='!' then begin
      Memo2.Text:=Memo2.Text+Copy(Memo1.Text,(i-k)+a,k);
      k:=0;
    end;
    if Memo1.Text[i]='.' then begin
      k:=0;
      a:=1;
    end;
    if Memo1.Text[i]<>'!' then k:=k+1;
  end;
end;

 
 
 
 
Сообщение25.04.2009, 20:36 
спасибо

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group