У меня тут проблемка возникла: Как найти нужные мне слова в memo записанные в edit (у меня находит только 1 встречающееся дальше не ищет) и если найдено слово в строке ,то каждое слово етой строки записать в таблицу в отдельную колонку . Как мне это организовать?? плизз помогите
Atos
11.05.2005 14:11
Цитата
у меня находит только 1 встречающееся дальше не ищет)
Приведи код процедуры, посмотрим, что не так.
hiv
11.05.2005 14:38
Делаешь с помощью строковых списков, вот так:
procedure SplitWords(line :string; var words :TStrings);
var s:string;
begin
s:=Trim(line); // обрезаем пробелы спереди и сзади
while pos(' ',s)>0dobegin
Words.Add(copy(s,1,pos(' ',s)-1));
delete(s,1,pos(' ',s));
while (length(s)>0) and (s[1]=' ') do delete(s,1,1);
end;
if length(s)>0then Words.Add(s);
end;
procedure TForm1.Button1Click(Sender: TObject);
var i, j :integer;
SearchWords, LineWords :TStrings;
begin// создаем пустой список слов
SearchWords:=TStringList.Create;
LineWords:=TStringList.Create;
try// добавляем в список слова, которые будем искать
SplitWords(Edit1.Text,SearchWords);
if SearchWords.Count=0thenraise Exception.Create('Не заданы слова для поиска!');
// очищаем результирующую таблицу
StringGrid1.ColCount:=1;
StringGrid1.RowCount:=1;
StringGrid1.Rows[0].Clear;
// ищем слова
for i:=0to Memo1.Lines.Count-1dofor j:=0to SearchWords.Count-1doif pos(SearchWords.Strings[j],Memo1.Lines.Strings[i])>0thenbegin// добавляем найденное в таблицу
StringGrid1.RowCount:=StringGrid1.RowCount+1;
LineWords.Clear;
SplitWords(Memo1.Lines.Strings[i],LineWords);
if StringGrid1.ColCount<LineWords.Count then
StringGrid1.ColCount:=LineWords.Count;
StringGrid1.Rows[StringGrid1.RowCount-1].Assign(LineWords);
end;
if StringGrid1.RowCount>1then
StringGrid1.FixedRows:=1;
finally
SearchWords.Free;
LineWords.Free;
end;
end;
Все компоненты стандартные...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.