在Delphi中旋转内容?

时间:2016-05-22 06:18:54

标签: string delphi random

我想创建一个简单的内容微调器,它的工作原理如下:

  1. 我在Memo1中输入了一些包含分隔符的文本(例如{This is a simple text|Here We can find a simple text|Here are just some regular words} {which I want to spin|that I want to change|that I need to change}, {please|I need to know}, {what can I do?|how can I do it?} {Thank You|Thanks})。

  2. 该函数将根据这些分隔符随机化字符串并将它们输出到Memo2。一个随机输出就是“在这里我们可以找到一个我需要更改的简单文本,请问,我该怎么做?谢谢”。

  3. 保持换行符和空格非常重要。另一个重要的事情是永远不要输出彼此相同的结果。

    所以基本上它会根据分隔符对单词/句子进行排序,然后根据我的需要创建随机内容。它看起来很简单,我可以用数字来做,但不能真正想办法用文本来做。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

只是一个简单的示例,可以帮助您入门。

uses
  StrUtils, System.Types, Math;

function MakeSentence(const AText, ADelimiter: string): string;
var
  _SentenceParts: TStringDynArray;
  _SubParts: TStringDynArray;
  i: Integer;
begin
  Result := '';

  if not AnsiContainsText(AText, '{') then // ...other checks
    Exit;

  _SentenceParts := SplitString(AText, '}');
  for i := 0 to Length(_SentenceParts) - 1 do
  begin
    _SentenceParts[i] := Copy(Trim(_SentenceParts[i]), 2,
      Length(_SentenceParts[i]));
    // Punctuation, etc
    _SentenceParts[i] := StringReplace(_SentenceParts[i], '{', '',
      [rfIgnoreCase]);
  end;

  for i := 0 to Length(_SentenceParts) - 1 do
  begin
    _SubParts := SplitString(_SentenceParts[i], ADelimiter);
    if Length(_SubParts) > 0 then
      Result := Result + ' ' + _SubParts[RandomRange(0, Length(_SubParts) - 1)];
  end;
end;

用法:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  Memo2.Text := MakeSentence(Memo1.Text, '|');
end;

enter image description here