2012-01-10 6 views
0

私は私のフォームでこのテキストファイルからデータを読み取り、それをメモフィールドに表示する方法は?

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

のようなデータが存在edtIdと呼ばれる1つのテキストボックスを持って、検索ボタンをクリックしてくださいfield.Whileボタン(btnFind)、およびメモを見つける含まれていprofile.txtというテキストファイルを持っています対応するデータがメモに表示されます。 ありがとう

答えて

-1

次のprocはメモ内の文字列を選択します。 テキストファイルをメモに読み込むには、単に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; 

あなたは、単に、テキスト1行だけを表示し、そのプロシージャ内の行のインデックスを保存し、Memo1.Lines.Delete(インデックス)を使用して、他のすべての行を削除する必要がある場合。

+1

このコードは非常に非効率的です。一つは、ループは役に立たない。ループを使用する場合、 'Memo1.Text'の代わりに' Memo1.Lines [i] 'を使用する必要がありますが、' p'が間違った値になるため 'Memo1.SelStart'の割り当て方法を変更する必要があります。簡単な解決策は、ループを完全に取り除くことです。さらに、 'TRichEdit'に切り替え、' Pos() 'の代わりに' FindText() 'メソッドを使用してください。 –

+0

あなたは正しいですが、このコードは部分文字列(この場合はid)のみを検索して選択します。 TMemoに部分文字列を見つける他の方法はありません。 Memo1.Lines [i]を使う必要があることは明らかです(edtId 1が1行目にある場合のみ有効です)。 TRichEditに切り替えることに同意します。しかし、メモの管理レコードはそれを実行する最悪の方法だと思います。データベースまたは少なくともレコードの配列を使用する方がよいでしょう。 –

+0

私の以前のコメントはまだありません。一度に1行ずつ 'Memo'をループする場合は、' Text'プロパティをまったく使用しないでください。それ以外の場合は、TRichEditを使用して、組み込みの検索機能を利用します。 –

関連する問題