Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.02.2009, 23:22
FreeUser FreeUser вне форума
Начинающий
 
Регистрация: 13.08.2008
Сообщения: 119
Репутация: 10
По умолчанию Счетчик в мемо и файлы

Еще одна задача образовалась.
В 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);
Вроде по смыслу должно быть так, далее я так понимаю надо уже через While и с этим проблема. Помогите пожалуйста с задачкой. Заранее Спасибо!

p.s. Забыл сказать. Что в txt я придумал сохранять в том же цикле но в мемо2. Т.е. этот кусок в мемо2 а там SaveToFile. Так вроде должно работать.

Последний раз редактировалось FreeUser, 08.02.2009 в 23:25.
Ответить с цитированием
  #2  
Старый 08.02.2009, 23:41
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Точка должна быть до k или в любом месте?
2. Удобнее работать со строкой. Тут есть несколько вопросов. Учитывать ли переводы строк (2 символа - #13#10). Если не учитывать, то на что их заменять (пропускать или просто на пробел)?
Ну а далее задача решается простым методом. Ответишь на вопросы - подскажу дальше.
Ответить с цитированием
  #3  
Старый 08.02.2009, 23:59
FreeUser FreeUser вне форума
Начинающий
 
Регистрация: 13.08.2008
Сообщения: 119
Репутация: 10
По умолчанию

"." Точка должна быть после К. Т.е. если К выпадает на середину слова, запятую или пробел, т.е. фактически в середину предложения, то предложение это надо закончить, т.е. двигаться в сторону К+.
2. Переводы строк просто пропускать, не считать их.
Ответить с цитированием
  #4  
Старый 09.02.2009, 00:13
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну тогда алгоритм простой.
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  
Старый 09.02.2009, 00:29
FreeUser FreeUser вне форума
Начинающий
 
Регистрация: 13.08.2008
Сообщения: 119
Репутация: 10
По умолчанию

Спасибо. Сейчас потестим.
Ответить с цитированием
  #6  
Старый 09.02.2009, 00:30
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Мог где и ошибиться, но логика, ИМХО, понятна. Точку ищем прямо с позиции К.
Ответить с цитированием
  #7  
Старый 09.02.2009, 00:34
FreeUser FreeUser вне форума
Начинающий
 
Регистрация: 13.08.2008
Сообщения: 119
Репутация: 10
По умолчанию

А что такое AMemo? Это Мемо1 у вас так названа?
Ответить с цитированием
  #8  
Старый 09.02.2009, 00:36
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну да, просто я указал ее как параметр функции. Смотри второй код - там эта функция прямо в первой строке вызывается.
Ответить с цитированием
  #9  
Старый 09.02.2009, 00:38
FreeUser FreeUser вне форума
Начинающий
 
Регистрация: 13.08.2008
Сообщения: 119
Репутация: 10
По умолчанию

Ага..Сейчас разберусь.
Ответить с цитированием
  #10  
Старый 09.02.2009, 00:46
FreeUser FreeUser вне форума
Начинающий
 
Регистрация: 13.08.2008
Сообщения: 119
Репутация: 10
По умолчанию

Он мне в функции ошибку пишет
[Error] Unit1.pas(40): Undeclared identifier: 'Count'
Ответить с цитированием
  #11  
Старый 09.02.2009, 00:56
FreeUser FreeUser вне форума
Начинающий
 
Регистрация: 13.08.2008
Сообщения: 119
Репутация: 10
По умолчанию

Так, разобрался. Это, если я правильно понял, не совсем то. Тут копируется первый кусок удовлетворяющий условиям. А мне надо чтобы текст из мемо1 был весь порезан на такие куски и сохранен каждый кусок в отдельный файл. Т.е. текст в мемо1 должен постоянно уменьшаться и вконеце, когда будут остатки, то и эти остатки в последний текстовый файл.

Последний раз редактировалось FreeUser, 09.02.2009 в 01:12.
Ответить с цитированием
  #12  
Старый 16.02.2009, 16:56
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

ты невнимательно читал.
Код зациклен, пока его длинна больше твоего к. Ну и хвост после цикла тоже запихивается как отдельная строка. Читай внимательней!!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter