![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с TMemo [D7, XP]
Nikki © (2011-08-12 14:48:00)Подскажите пожайлуста,как в тексте(загруженом в Memo) найти предложения содержащие более 30 сим. и вывести в соседний компонент Memo?
SQLEXPRESS (2011-08-12 23:28:00) [1]хотя странно...суровые челябинские студенты и летом учатся? :)
Nikki (2011-08-12 23:01:00) [2]Еще раз спасибо за помощь!
SQLEXPRESS (2011-08-12 21:20:00) [3]
> oldman © (12.08.11 20:25) [7]
а не нужно при сдаче лабы выбирать такой текст :)
а проблема на самом деле, конечно, несколько больше, чем кажется на первый взгляд. Любая прямая речь может порвать так, как Промту и не снилось..
oldman (2011-08-12 20:25:00) [4]
> OW © (12.08.11 17:29) [6]
В тексте
"Не нужно использовать знаки `.`, `!` и `?` где не надо."
вся лаба идет прахом
OW (2011-08-12 17:29:00) [5]для сдачи лабы пойдет так, например
я "добрый" в пятницу :)
Const
EndS: Set of char = ['.', '!', '?'];
var
S: string;
i: Integer;
C: integer;
begin
S := mmo1.Lines.Text;
S := StringReplace(S, #13#10, #32, [rfReplaceAll]);
repeat
S := StringReplace(S, #32#32, #32, [rfReplaceAll]);
until Pos(#32#32, S) = 0;
C := 0;
for i := 1 to Length(s) - 1 do
begin
// тут бы с pos опять не мешало, или posEx, а не перебирать, но не охота думать
if S[i] in EndS then
begin
mmo2.Lines.Add('--');
mmo2.Lines.Add( IntToStr(i-C) + 'ñèìâîëîâ');
mmo2.Lines.Add(Copy(S, C, i-C));
C := i + 1;
end;
end;
// если в конце точку забыли
if Length(S) - C > 30 then
begin
mmo2.Lines.Add(Copy(S, C, Length(S) - C) + '.');
end;
end;
Nikki (2011-08-12 16:09:00) [6]Спасибо большое!
Игорь Шевченко (2011-08-12 15:57:00) [7]в первую очередь выгрузит из мемо и работать со строкой. Иначе открытий чудных может быть дофига
OW (2011-08-12 15:34:00) [8]убедиться, что все собрано в одну строку. ( т.е. исключить символы перевода строки(возможно + исключить двойные пробелы))
Определить, что считается признаком конца предложения.
текущее положение = 0
повторять
найти следующий признак конца предложения от текущего положения.
если расстояние между ним и текущее положение > 30 символов
записать в мемо2(возможно отнять кол-во пробелов)
текущее положение = признак конца предложения
цикл
oldman (2011-08-12 15:12:00) [9]И то лопухнуться можно. Если, например, искать точку как конец предложения
Нужен форматированный текст в Мемо. Например, одно предложение - одна строка.
oldman (2011-08-12 14:57:00) [10]функциями поиска в тексте и функциями присваивания