|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Сформировать текстовый файл, в который записать все предложения исходного текста, сод
Всем доброй ночи
Помогите решить такое вот задание: Сформировать текстовый файл, в который записать все предложения исходного текста, содержащие кому, а также нужно сформировать список, содержащий длину каждого предложения исходного текста. Может что-то из этого кода можно "выковырять"? Код:
procedure TForm1.Button1Click(Sender: TObject); const //Разделители предложений. Df = ['.', '!', '?']; //Разделители слов. Da = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13]; var S : String; //P1 - позиция начала предложения. CntW - счётчик слов в предложении. i, CntW, P1, Len : Integer; begin Memo2.Clear; //Исходный текст. S := Memo1.Text; Len := Length(S); //Обработка текста. P1 := 0; CntW := 0; for i := 1 to Len do begin //Отслеживаем начало предложения. if (i = 1) or (S[i - 1] in Df) then P1 := i; //Если символ не является разделителем слова. if not (S[i] in Da) then begin; //Отслеживаем конец слова и подсчитываем слово. if (i = Len) or (S[i + 1] in Da) then Inc(CntW); end; //Отслеживаем конец предложения. if (i = Len) or (S[i] in Df) then begin //Если количество слов >= 3, то добавляем это предложение //в Мемо результата. if CntW >= 2 then Memo2.Lines.Add( Copy(S, P1, i - P1 + 1) ); //Сброс счётчика слов. CntW := 0; end; end; end; |
#2
|
||||
|
||||
Цитата:
Это слово в предложении? Это адресат в некоем формате? Это просто запятая (по английски). О чем вообще речь идет? Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
Цитата:
Спасибо за ответ. Сорри, за неясность. Это обычная запятая в преложении (,). |
#4
|
||||
|
||||
Тогда все проще некуда. Используйте клас TStringList, он содержит методы которые легко позволяют решить эту задачу:
Код:
Var SL: TStringList; i: Integer; begin SL := TStringList.Create; SL.StrictDelimiter := True; SL.Delimiter := ','; SL.DelimitedText := 'Это текст, в котором есть запятая, точка, вопросительный знак и прочее?'; SL.SaveToFile('CommaFile.txt'); for i := 0 to SL.Count - 1 do SL.Strings[i] := SL.Strings[i] + ' - ' + IntToStr(Length(SL.Strings[i])); ShowMessage(SL.Text); end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 17.05.2014 в 09:22. |