下午,从网上找到一个“读取文本文件指定内容”程序,
procedure TForm1.Button2Click(Sender: TObject);
var vList:TStringList;
  i:Integer;
  S:string;
begin
  vList:=TStringList.Create;
  try
    vList.LoadFromFile('D:\test.txt');
    for i:=0 to vList.Count-1 do
    begin
      S:=vList.Strings[i];
      if AnsiContainsText(S,'XX-ClientIp') then
      begin
        ShowMessage(Copy(S,Pos(':',S)+1,Length(S)));
        Break;
      end;
    end;
  finally
    vList.Free;
  end;
end;
test.txt的内容如下:
XX-User: [email protected] 
XX-MsgType: MAIL_READ_MAIL 
XX-ClientMac: E0C0A0070300 
XX-ServerMac: 981000000111 
XX-ClientPort: 64315 
XX-ServerPort: 80 
XX-ClientIp: 123.243.151.171
XX-ServerIp: 202.108.5.18 
XX-Protocol: HTTPMAIL
执行完上面程序后,将取出“123.243.151.171”,并在对话框上显示。
假设test.txt内容变成:
XX-User: [email protected] 
XX-MsgType: MAIL_READ_MAIL 
XX-ClientMac: E0C0A0070300 
XX-ServerMac: 981000000111 
XX-ClientPort: 64315 
XX-ServerPort: 80 
XX-ClientIp: 123.243.151.171  Phone:075512345678 Date:2009.08.24
XX-ServerIp: 202.108.5.18 
XX-Protocol: HTTPMAIL 
请问,如果要取出XX-ClientIp、Phong和Date的内容,即:
123.243.151.171
075512345678
2009.08.24
该如何修改上面程序?

解决方案 »

  1.   

    如果把文件中的冒号换成等号的话,可以如下处理
    sClientIp = vList.values[ 'XX-ClientIp' ];
    新人要勤快一点
    如果采用上面的方式,多加几个if就可以把所有的值都读出来
      

  2.   

    按这个样子去修改一下,利有Delimiter属性:procedure TForm1.btn1Click(Sender: TObject);
    var vList,vListT:TStringList;
        i,j:Integer;
    begin
      vList:=TStringList.Create;
      vListT:= TStringList.Create;
      try
        vList.LoadFromFile('D:\test.txt');
        for i:=0 to vList.Count-1 do
        begin
          vListT.Delimiter := ':';
          vListT.DelimitedText := vList[i];
          for j:= 0 to vListT.Count-1 do
          begin
            if vListT[0] = 'XX-ClientIp' then
            mmo1.Lines.Add(vListT[j]);
          end;
        end;
      finally
        vList.Free;
        vListT.Free;
      end; 
    end;