如何复制段落中的所有单词并在delphi上添加每个单词#

时间:2014-11-18 21:30:40

标签: delphi delphi-xe2 delphi-7 delphi-xe5

使用Delphi 7,如果我有一些类似下面左侧窗口中显示的文字,我怎样才能提取段落中的所有单词和标点符号并将它们复制到右边的另一个窗口,然后是#?

enter image description here

1 个答案:

答案 0 :(得分:1)

如果我正确理解你,你需要所谓的" tokeniser"或者" lexer"。

D7带有一个内置的,在Classes单元中,误导性地称为TParser(误导性因为解析通常意味着"语法分析"步骤可能跟随文本的标记化,如同在编译器的操作。)

无论如何,iirc,Delphi的TParser的目的是处理DFM文件的文本,因此不一定会按照你想要的方式拆分文本,但这只是一个开始。例如,当它标记":="时,它将返回":"和" ="作为两个独立的令牌,当然,当NextToken / TokenString连续返回时,你可以自由地再次加入它们。顺便说一句,有几种使用免费软件Jedi JCL和JVCL库中的类实现tokeniser的替代方法,f.i。

如果q左侧的文本窗口位于您自己的应用程序中,请执行以下代码 可以做你想做的事:

procedure TForm1.Tokenise;
var
  SS : TStringStream;
  TokenText : String;
  Parser : TParser;
begin
  SS := TStringStream.Create(Memo1.Lines.Text);
  Parser := TParser.Create(SS);

  try
    while Parser.Token <> #0 do begin
      TokenText :=  Parser.TokenString;
      Memo2.Lines.Add(TokenText + '#');
      Parser.NextToken;
    end;
  finally
    Parser.Free;
    SS.Free;
  end;

end;

如果文本窗口在另一个应用程序中,您当然也需要一种从中检索文本的方法。