![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Еще одна задача образовалась.
В memo1 помещен текст. Есть число К. Оно задается пользователем или рандомом. Требуется, Пробежаться по тексту в Мемо до символа!(включая запятые, пробелы и т.д.) до символа К, посмотреть, где ближайшая к нему "."(точка). Вырезать от начала текста до этой точки весь текст и сохранить его в Файл txt. И так весь текст. Кто сможет помочь? Я запутался в циклах и их вложенности при подсчете символов Код:
k:=0; //счетчик символов For i:=0 to Memo1.Lines.Count-1 do for j:=0 to length(Memo1.Lines.Count[i]) do begin inc(k); ![]() p.s. Забыл сказать. Что в txt я придумал сохранять в том же цикле но в мемо2. Т.е. этот кусок в мемо2 а там SaveToFile. Так вроде должно работать. Последний раз редактировалось FreeUser, 08.02.2009 в 23:25. |
|
#2
|
|||
|
|||
|
1. Точка должна быть до k или в любом месте?
2. Удобнее работать со строкой. Тут есть несколько вопросов. Учитывать ли переводы строк (2 символа - #13#10). Если не учитывать, то на что их заменять (пропускать или просто на пробел)? Ну а далее задача решается простым методом. Ответишь на вопросы - подскажу дальше. |
|
#3
|
|||
|
|||
|
"." Точка должна быть после К. Т.е. если К выпадает на середину слова, запятую или пробел, т.е. фактически в середину предложения, то предложение это надо закончить, т.е. двигаться в сторону К+.
2. Переводы строк просто пропускать, не считать их. |
|
#4
|
|||
|
|||
|
Ну тогда алгоритм простой.
1. Получение строки для работы: Код:
function GetStr(AMemo : TMemo) : String;
var
I : Integer;
begin
Result := '';
For I := 0 To AMemo.Count-1 Do
Result := Result + AMemo.Lines[i];
end;2. Разбивка Код:
S := GetStr(Memo1);
While Length(S) > K Do
begin
F := True;
For I := K To Length(S) Do
If S[i] = '.' Then
Begin
Memo2.Lines.Add(Copy(S,1,I));
S := Copy(S,I+1,Length(S) - I +1);
F := False;
Break;
End;
If F Then Break;
end;
If S <> '' Then Memo2.Lines.Add(S); |
|
#5
|
|||
|
|||
|
Спасибо. Сейчас потестим.
|
|
#6
|
|||
|
|||
|
Мог где и ошибиться, но логика, ИМХО, понятна. Точку ищем прямо с позиции К.
|
|
#7
|
|||
|
|||
|
А что такое AMemo? Это Мемо1 у вас так названа?
|