TXT文档路径为:D:\记录.TXT
TXT内容为:
时间                        用户IP                  查询类型              查询内容
2009-2-1 9:56:40        192.168.188.128            A               www.sina.com
2009-2-1 9:56:41        192.168.188.128            A               www.sina.com
2009-2-1 9:56:45        192.168.188.128            A               www.delphisearch.cn
2009-2-1 9:56:46        192.168.188.128            A               i3.sinaimg.cn
2009-2-1 9:56:46        192.168.188.128            A               www.delphisearch.cn
请问大大,读取TXT文档的内容到MEMO中
我想读取的内容为查询内容下的地址
表现形式如:
查询内容              记录条数
www.sina.com        2    //代表有2条这个记录
i3.sinaimg.cn       1
....
我只会读所有,选择读取还请大家指教,谢谢,十分感谢

解决方案 »

  1.   

    用INI文件吧,有固定格式好办得多。
      

  2.   

    你每一列间的空格数量一定吗如果不定,你就从后往前找,找到第一个空格就停下,取空格后的字符,然后循环每行,把取到的字符在内存中组织好(内容,数量),然后在写到memo中
      

  3.   

    用hash table这种数据结构,key是大小写不敏感的string,value是出现次数
    按行读入,查找出要查询的串,如果表里没有的话添加 key=网址 value=1,如果已经有了就value加1
    最后遍历输出key和value就可以了
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var
      str,  TargetStr : TStringlist;  i ,J,K: integer;
    begin
      str := TStringList.Create;
      TargetStr := TstringList.Create;
      try
        Str.LoadFromFile('C:\test.txt');
        for i := 0 to str.Count -1 do
        begin
          TargetStr.Append(
            copy(str.Strings[i],
                 LastDelimiter(' ',trim(Str.Strings[i])),length(Str.Strings[i])));
        end;    TargetStr.Sorted := True;
        TargetStr.Sort;
        for I := 0 to TargetStr.Count -1 do
        begin
          K := 1;
          for J := 0 to TargetStr.Count -1 do
          begin
            if i = J  then continue;
            if Trim(TargetStr.Strings[i]) = Trim(TargetStr.Strings[j]) then inc(k);
          end;
          if Memo1.Lines.IndexOf(TargetStr[i] +'  '+inttostr(k)) = -1 then      Memo1.Lines.Append(TargetStr[i] +'  '+inttostr(k));
        end;
      finally  end;
    end;end.亂寫的。你可以改進下,用HASH表去查
      

  5.   


    华仔的程序很详细了
    关键函数是LastDelimiter,取得最后一空格的位置
      

  6.   

    谢谢老刘的提示,不愧提升双星掌柜,我要多问点这样肤浅的问题好给你冲三星
    谢谢bdmh的提示,谢谢.马上给分
      

  7.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      str,  TargetStr : TStringlist;
      list : TListItem;
      i ,J,K : Integer;
    begin
      str := TStringList.Create;
      TargetStr := TstringList.Create;
      try
        Str.LoadFromFile('C:\test.txt');
        for i := 0 to str.Count -1 do
        begin
          TargetStr.Append(
            copy(str.Strings[i],
                 LastDelimiter(' ',trim(Str.Strings[i])),length(Str.Strings[i])));
        end;
        str.Clear;    TargetStr.Sorted := True;
        TargetStr.Sort;
        for I := 0 to TargetStr.Count -1 do
        begin
          K := 1;
          for J := 0 to TargetStr.Count -1 do
          begin
            if i = J  then continue;
            if Trim(TargetStr.Strings[i]) = Trim(TargetStr.Strings[j]) then inc(k);
          end;       if str.IndexOf(TargetStr[i] +'  '+inttostr(k)) = -1 then
           begin
             str.Add(TargetStr[i] +'  '+inttostr(k));
             list := ListView1.Items.Add;
             list.Caption := TargetStr[i];
             list.SubItems.Text := Inttostr(k);
           end;    end;
      finally
        FreeAndNil(Str);
        FreeAndNil(TargetStr);
      end;
    end;