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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2011, 13:24   #1
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию Размножение текста формулами

Доброго времени суток. Хочу реализовать на практике размножение текста с помощью формул - {|}, [|]. Порыскал в Google - ничего стоящего не нашел. Может кто-то раньше встречал исходники таких программ? В принципе сделать не очень тяжело, но использовать я буду для этого POS, POSEx, нету ли других процедур, пригодных для этого? Просто не в курсе я.
Для тех, кто не в курсе. Размножение текста происходит с помощью формул {|} и [|].
{|} - выбор одного рандомного значения. Если ввести например {Привет|Пока|Hello} на выходу будем иметь одно из трех слов.
[|] - перебор в случайном порядке. Пример: Добрый день [люди | инопланетяне|животные]. На выходе получим несколько вариантов, например: Добрый день люди инопланетяне животные или Добрый день инопланетяне люди животные . Попытался на словах объяснить. В ФРИЛАНС не отправлять, интересует именно самому сделать. С вашей стороны просто хочу услышать что целесообразнее использовать для этого.
kardinal94 вне форума Ответить с цитированием
Старый 05.03.2011, 14:47   #2
dosha
Форумчанин
 
Регистрация: 30.08.2010
Сообщений: 224
По умолчанию

тебе над отфильтровывать весь текст и выделять его по формулам слова, pos подойдёт но лутше в инете найди Pars() она лутше подойдёт для этого дела.
dosha вне форума Ответить с цитированием
Старый 31.07.2012, 21:52   #3
viktor-zakal
Пользователь
 
Регистрация: 14.05.2010
Сообщений: 14
По умолчанию

Здравствуйте форумчане. Я нашел функцию размножения статей по шаблону. Но как ее заставить работать под Delphi2010

Вот код
Код:
(* Модуль uCloner для размножения текста по формулам  *)
(* 1. Выбор случайного {слово1|слово2}                *)
(* 2. Перемешивание [%слово1|слово2%]                 *)
(* Разрешается ипользовать бесплатно в своих проектах. *)

unit uCloner;

INTERFACE

// размножение статей {такого|этого} вида и такого [%слово1|слово2|слово3%]
// {выбор случайного|} и [%перемешивание%]
function Cloner(S: string): string;

IMPLEMENTATION

uses
  Classes,{ AcedStrings,} Fun;

// размножение статей
function Cloner(S: string): string;
var
  i, j: Integer;
  SL: TStringList;
  Fraza, Slovo: string;
begin
  // случайный вариант из фигурных скобок {слово1|слово2|слово3} 
  i:= G_PosStr('{', S);
  while i>0 do begin
    j:= G_PosStr('}', S);
    // ищем правую пару, кол-во открывающих и закрывающих скобок д.б. одинаковым
    while G_CountOfChar(Copy(S, i+1, j-i-1), '{')<>G_CountOfChar(Copy(S, i+1, j-i-1), '}') do
      j:= G_PosStr('}', S, j+1);
    if j>0 then begin
      SL:= TStringList.Create;
      Fraza:= Copy(S, i+1, j-i-1); // выделяем {фразу для размножения}
      G_Delete(S, i, j-i+1);
      if G_PosStr('{', Fraza)>0 then // рекурсивно размножаем
        Fraza:= Cloner(Fraza);
      Fraza:= Fraza + '|';
      j:= G_PosStr('|', Fraza); // выбираем варианты|варианты
      // ищем правую пару, кол-во открывающих и закрывающих скобок д.б. одинаковым
      while G_CountOfChar(Copy(Fraza, 1, j), '[')<>G_CountOfChar(Copy(Fraza, 1, j), ']') do
        j:= G_PosStr('|', Fraza, j+1);
      while j>0 do begin
        Slovo:= Copy(Fraza, 1, j-1); // отдельный вариант
        G_Delete(Fraza, 1, j);
        {G_Trim(Slovo);}
        SL.Add(Slovo); // добавляем в список
        j:= G_PosStr('|', Fraza);
        // ищем правую пару, кол-во открывающих и закрывающих скобок д.б. одинаковым
        while G_CountOfChar(Copy(Fraza, 1, j), '[')<>G_CountOfChar(Copy(Fraza, 1, j), ']') do
          j:= G_PosStr('|', Fraza, j+1);
      end;
      j:= Random(SL.Count);
      // берём случайный вариант из списк
      Slovo:= SL[j];
      Insert(Slovo, S, i);
      SL.Free;
    end;
    i:= G_PosStr('{', S);
  end; // while i>0 do begin

  // перемешивание вариантов из скобок [%слово1|слово2|слово3%]
  i:= G_PosStr('[%', S);
  while i>0 do begin
    j:= G_PosStr('%]', S);
    // ищем правую пару, кол-во открывающих и закрывающих скобок д.б. одинаковым
    while CountOfString(Copy(S, i+1, j-i-1), '[%')<>CountOfString(Copy(S, i+1, j-i-1), '%]') do
      j:= G_PosStr('%]', S, j+1);
    if j>0 then begin
      SL:= TStringList.Create;
      Fraza:= Copy(S, i+2, j-i-2); // выделяем [%фразу для перемешивания%]
      G_Delete(S, i, j-i+2);
      if G_PosStr('[%', Fraza)>0 then // рекурсивно перемешиваем
        Fraza:= Cloner(Fraza);
      Fraza:= Fraza + '|';
      j:= G_PosStr('|', Fraza); // выбираем варианты|варианты
      while j>0 do begin
        Slovo:= Copy(Fraza, 1, j-1); // отдельный вариант
        G_Delete(Fraza, 1, j);
        SL.Add(Slovo); // добавляем в список
        j:= G_PosStr('|', Fraza);
      end;
      Slovo:= '';
      while SL.Count>0 do begin
        j:= Random(SL.Count);
        // добавляем случайный вариант из списка
        Slovo:= Slovo + SL[j];
        SL.Delete(j);
      end;

      Insert(Slovo, S, i);
      SL.Free;
    end;
    i:= G_PosStr('{', S);
  end; // while i>0 do begin

  Result:= S;
end;

END.

Последний раз редактировалось viktor-zakal; 31.07.2012 в 21:56. Причина: Ошибка в коде
viktor-zakal вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
размножение Локального диска miscreant Помощь студентам 4 21.11.2010 00:01
Проблема с формулами gadge Microsoft Office Word 5 29.05.2010 14:20
Автоматическое размножение бланков olgerd2007 Microsoft Office Excel 1 15.05.2010 15:24
Размножение окон Sergey2 Общие вопросы Delphi 35 29.01.2008 09:02
Размножение червя ZYRGiX Безопасность, Шифрование 6 07.09.2007 19:39