1、如何在A123.TXT文件中查找指定的字符串并返回行数?
2、如何根据行号直接读出对应行的数据。例如:A123.TXT内容如下:
A0001  ABCDEF02   33333
A0002  ABCDEF05   55555
A0003  ABCDEF07   99999
A0004  ABCDEF01   66666
A0005  ABCDEF09   44444
A0006  ABCDEF08   11111
...我想找出字符串A0005所在的行,并得到行号:5
然后根据行号5,直接读出第5行的数据"A0005  ABCDEF09   44444"

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      sl: TStringList;
      i: integer;
    begin
      sl := TStringList.Create;
      sl.LoadFromFile('e:\a.txt');
      for i:=0 to sl.Count-1 do
        Memo1.Lines.Add(sl.Strings[i]);
      FreeAndNil(sl);
      i := SendMessage(Memo1.Handle, EM_LINEFROMCHAR, Pos('A0005',Memo1.Text), 0);
      ShowMessage('行号:' + IntToStr(i+1) + #13#10 + '内容:'+ Memo1.Lines.Strings[i]);
    end;
      

  2.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      sl: TStringList;
      i: integer;
    begin
      sl := TStringList.Create;
      sl.LoadFromFile('e:\a.txt');
      for i:=0 to sl.Count-1 do
        if Pos('A0005', sl.Strings[i])>0 then
        begin
          ShowMessage('行号:' + IntToStr(i+1) + #13#10 + '内容:'+ sl.Strings[i]);
          break;
        end;
      FreeAndNil(sl);
    end;
      

  3.   

    function FindTextFromFile(FileName,Text:String):Integer;
    var s:TStringList;
    begin
      result:=0;
      s:=TStringList.Create;
      s.LoadFromFile(FileName);
      s.Find(Text,result);
     // ShowMessage(s[result]);//要显示行数据加这句
      s.Free;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      ShowMessage(IntToStr(FindTextFromFile('c:\A123.Txt','A0003')));
    end;
      

  4.   

    Find函数应该是有问题的你将Find返回的Boolean结果判断一下就知道了,比如搜索一个1,根本搜不到
      

  5.   

    1.以上内容,我想用在funtion中,编译成一个DLL文件,不是用在form中,所以不能用Memo1控件。
    2.用逐行读数据的方式查找,这样效率好象不高。这样做与ReadLn()没有多大区别。有没有其它简便一点的方法?
      

  6.   

    经测试,使用TStringList结果非常好,可以满足楼主的要求。
    请楼主试一下。