Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Разрезать текст в Мемо


Автор: Canada 10.2.2009, 00:04
Здравствуйте. У меня такая проблема:
В memo1 помещен текст. Есть число К. Оно[число К] задается пользователем или рандомом(это не важно). Требуется, Пробежаться по тексту в Мемо до символа!(включая запятые, пробелы и т.д.) до символа К, посмотреть, где ближайшая к нему "."(точка). Вырезать от начала текста до этой точки весь текст и сохранить его в Файл txt. И так весь текст. Т.е. надо весь текст порезать курсками указанного К и сохранить в файлы txt с рандомными именами. Переводы строк не учитываются, просто пропускаются.

И так, что имеем на момент написания поста. А имеею я код модератора соседнего форума lmikle (За что ему большое спасибо!)
Такого вида:
Получение строки для работы:
Код

function GetStr(AMemo : TMemo) : String;
var
  I : Integer;
begin
  Result := '';
  For I := 0 To AMemo.Count-1 Do
    Result := Result + AMemo.Lines[i];
end;


Разбивка

Код

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);


Но данный код у меня не работает. Вернее работает, но криво, что-то делит и как-то сохраняет, но явно не так как надо.

По условию задачи надо чтобы условный текст в Мемо1 был распилен на куски размером К символов и в случаях, когда это К выпадает не на конец предложения, чтобы не рвать текст на полуслове кусками и не уродовать тем самым, надо добраться до первой "."(точки) Ну чтобы предложение было законченным. Ведь предложения точкой заканчиваются. Вот такое задание. Случаи, когда предложение заканчивается !, ? или иными знаками не рассматриваются.

Буду благодарен тем, кто пояснит и поможет как это все реализовать, я не спец в программировании пока. Заранее всех благодарю за помощь и советы.

Автор: Poseidon 10.2.2009, 01:57
Вообще не понял зачем функция GetStr, если все, что она делает, можно взять из AMemo.Text
 
Цитата(Canada @  10.2.2009,  00:04 Найти цитируемый пост)
Но данный код у меня не работает. Вернее работает, но криво, что-то делит и как-то сохраняет, но явно не так как надо.
А у меня код работает именно так, как описано. Есть неточности в коде, вроди как не AMemo.Count, а AMemo.Lines.Count и переменные не обьявлены, но это не критично.

Берем кусок К, смотрим дальше до точки и разделяем. Что не получается, конкретно?

Автор: Canada 10.2.2009, 14:20
Он у меня все время ко всем кускам добавляет "первый кусок". Т.е. Взяла программа текст, в первый проход выделила кусок и сохранила его. Пошел второй проход и к правильно выделенному, она лепит еще и первый. К 3-ему она лепит первые 2, к 4-му первые 3. А это ведь не правильно.

Автор: Canada 10.2.2009, 14:52
Вах, нащОль рэшениэ!
Там мемо2 надо чистить каждый раз в том же цикле..Какой йа тупой бил..
Всем спасибо!

Автор: morpheyushka 10.2.2009, 15:14
А тему закрыть религия не позволяет? smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)