|
|
Регистрация | << Правила форума >> | 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 у вас так названа?
|