Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2010, 20:16   #1
zver777
Пользователь
 
Регистрация: 31.07.2009
Сообщений: 89
По умолчанию Взять рандомное предложение из текста

Здравствуйте.
Вот такая задачка возникал передо мной. Не могу никак додуматься.

Есть текст(text:string) с предложениями. Концом предложения является точка. Надо скопировать в S рандомное предложение из этого текста.
zver777 вне форума Ответить с цитированием
Старый 09.04.2010, 20:24   #2
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Алгоритм таков...
Загружаете все в TStringList... Используете DelimitedText с Delimiter := '.'. Затем через Random(TStringList.Count) получаете число и выводите предложение под этим номером - TStringList[Random(TStringList.Count)]...
P.S.: Вместо TStringList - имя переменной данного типа... Вроде бы задание не тяжелое...
W0LF вне форума Ответить с цитированием
Старый 09.04.2010, 20:33   #3
zver777
Пользователь
 
Регистрация: 31.07.2009
Сообщений: 89
По умолчанию

Спасибо. Вопрос решён.

Последний раз редактировалось zver777; 09.04.2010 в 20:42.
zver777 вне форума Ответить с цитированием
Старый 09.04.2010, 20:44   #4
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Как пример можно использовать вот эту функцию вырезания из строки нужной части, учитывая что части разделяются символом в константе Delimiter
Код:
{
  Получение N-ой части (слова) из строки.  OrdN - номер нужной части (слова)
  Части (слова) в строке разделяются символом содержащимся в Delimiter
}
function GetPartNunFromString(OrdN: Integer; const S: string): string;
const
  Delimiter = ' '; // наш разделитель
var
  I,J,N: Integer;
  L: LongWord;
  P: PChar;
  A: Boolean;
begin
  L := Length(S);
  P := Pointer(S);
  A := False;
  N := 1;
  for I := 1 to L do
  begin
    if P^ <> Delimiter then
    begin
      if not A then
      begin
        if N = OrdN then
        begin
          N := L+1;
          Inc(P);
          for J := I+1 to L do
          begin
            if P^ = Delimiter then
            begin
              N := J;
              Break;
            end;
            Inc(P);
          end;
          Result := Copy(S,I,N-I);
          Exit;
        end;
        A := True;
        Inc(N);
      end;
    end else
      A := False;
    Inc(P);
  end;
  Result := '';
end;
Надеюсь далее ты сам ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 09.04.2010, 20:48   #5
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Нет, оказывается задание не такое уж и легкое, столкнулся с проблемой пунктуации... Когда точки стоят в сокращениях. Во общем, мутное дело)
W0LF вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рандомное заполнение массива ac1d_buRn Помощь студентам 15 03.05.2010 09:14
Где взять модуль для редактирования текста. Подойдёт как на этом форуме kkkggg PHP 1 21.09.2007 00:59
[b]Предложение модераторам[/b] Elm0 Свободное общение 5 25.05.2007 09:42