我想创建一个简单的内容微调器,它的工作原理如下:
我在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}
)。
该函数将根据这些分隔符随机化字符串并将它们输出到Memo2。一个随机输出就是“在这里我们可以找到一个我需要更改的简单文本,请问,我该怎么做?谢谢”。
保持换行符和空格非常重要。另一个重要的事情是永远不要输出彼此相同的结果。
所以基本上它会根据分隔符对单词/句子进行排序,然后根据我的需要创建随机内容。它看起来很简单,我可以用数字来做,但不能真正想办法用文本来做。有什么帮助吗?
答案 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;