【问题标题】:Delphi Extract Text Between string ListDelphi提取字符串列表之间的文本
【发布时间】:2017-07-15 13:33:56
【问题描述】:

我需要从字符串列表中提取文本?这非常有效,因此仅从字符串中提取。我需要从 Tmemo 中的列表中提取。

谢谢

function ExtractTextBetween(const Input, Delim1, Delim2: string): string;
var
  aPos, bPos: Integer;
begin
  result := '';
  aPos := Pos(Delim1, Input);
  if aPos > 0 then begin
    bPos := PosEx(Delim2, Input, aPos + Length(Delim1));
    if bPos > 0 then begin
      result := Copy(Input, aPos + Length(Delim1), bPos - (aPos + Length(Delim1)));
    end;
  end;
end;

【问题讨论】:

  • 不清楚你想要什么。您想提取TMemo 中每一行的文本吗?所以你希望结果是,什么,TStringList 可能? TMemo 有一个 Lines 属性,因此只需遍历这些属性并使用您现有的函数来提取每个属性。将它们添加到TStringList。除非你想要不同的东西,否则你需要解释更多。
  • 除了@lurker所说的,如果你想从备忘录的全文中提取,你可以使用TMemo.Lines.Text属性。如果要访问单个行,请像数组一样使用TMemo.Lines
  • 到目前为止,您是否考虑过其他 cmets 提供的内容?那里有很多东西可以帮助您入门。
  • 你的输入是什么样的?
  • 你需要知道如何编写循环吗?

标签: delphi extract


【解决方案1】:

不明白为什么不正确分隔,我只需要提取电子邮件

示例字符串

"email":"xxxx@xxxx.xom","cap":"00000",

memo3.Lines.AddStrings(ExtractText(memo2.Text,',"email":"','",')) ;

结果 xxxx@xxxx.xom","上限

function ExtractText(const Str: string; const Delim1, Delim2: string): TStringList;
var
  c,pos1, pos2: integer;
begin
  result:=TStringList.Create;
  c:=1;
  pos1:=1;

  while pos1>0 do
  begin
    pos1 := PosEx(Delim1, Str,c);
    if pos1 > 0 then begin
      pos2 := PosEx(Delim2, Str, pos1+1);
    if pos2 > 0 then
      result.Add(Copy(Str, pos1 + length(delim1), pos2 - (length(delim2) + pos1)));
      c:=pos1+1;
     end;

  end;

【讨论】:

  • 您似乎正在尝试手动解析 JSON。绝对不是一个好主意。您可以使用 JSON 库,包括 Delphi 内置的库。不管怎样,我看不出这如何回答你的问题。
  • 长话短说,如果您在 9 小时前提出问题时刚刚选择使用适当的 JSON 库,那么您现在已经超越了这一点。 JSON 不是基于换行符的格式,整个 JSON 可以在一行中,或者您可能期望的 1 行实际上可能有 5 个空行。
猜你喜欢
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 2017-11-10
  • 2016-08-13
  • 2013-05-14
相关资源
最近更新 更多