【问题标题】:how to read data from text file and display it over the Memo fields?如何从文本文件中读取数据并将其显示在备注字段上?
【发布时间】:2012-07-07 20:49:00
【问题描述】:

我有一个名为 profile.txt 的文本文件,其中包含这样的数据

1   Sharon   Jasper   Male
2   Steven   John   Male
3   Mary   Hill   Female

在我的表单中有一个名为 edtId 的文本框和查找按钮 (btnFind),以及一个备注字段。单击查找按钮时,相应的数据应显示在备注上。 谢谢

【问题讨论】:

    标签: delphi delphi-2010


    【解决方案1】:

    以下过程将在备忘录中选择一个字符串。 为了将文本文件加载到备忘录中,只需调用 Memo1.LoadFromFile(filepath);

    procedure TForm1.btnFindClick(Sender: TObject);
    var i,l,p: integer;
    begin
      l := Length(edtId.Text);
      for i := 0 to Memo1.Lines.Count - 1 do begin
        p := Pos(edtId.Text,Memo1.Text);
        if p <> 0 then begin
          Memo1.SetFocus;
          Memo1.SelStart := p-1;
          Memo1.SelLength := l;
          break;
        end;
      end;
    end;
    

    如果您只需要显示一行文本,只需将行索引保存在该过程中,然后使用 Memo1.Lines.Delete(index) 删除所有其他行。

    【讨论】:

    • 这段代码效率很低。一方面,循环是无用的。如果你使用循环,它需要使用Memo1.Lines[i] 而不是Memo1.Text,但是你必须改变Memo1.SelStart 的分配方式,因为p 是错误的值。一个更简单的解决方案是完全摆脱循环。更好的是,切换到TRichEdit 并使用其FindText() 方法而不是Pos()
    • 你是对的,但是这段代码只找到一个子字符串(在这种情况下是 id)并选择它。没有其他方法可以在 TMemo 中查找子字符串。如果他正在寻找备忘录中的“记录”,显然他需要使用 Memo1.Lines[i] (并且仅当 [e.g.] edtId 1 在第 1 行时才有效)。我同意你切换到 TRichEdit。但我认为在备忘录中管理记录是最糟糕的方法,最好使用数据库或至少一个记录数组。
    • 我早期的 cmets 仍然存在。如果您打算一次循环遍历Memo 一行,则根本不要使用Text 属性。否则,请使用 TRichEdit 并利用其内置的搜索功能。
    猜你喜欢
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多