我想把文本文件读到文件流中。然后统计 某一个字符串的个数。请各位大侠帮我 一下。

解决方案 »

  1.   

    为啥非读到文件流中?
    下面的看是否适合你var
      ss:TStringlist;
      i:integer;
    begin
      ss:=TStringlist.create;
      ss.loadfromfile('1.txt');
      for i:=0 to ss.count do begin
        {统计ss[i]中的某字符串个数,应该好求多了吧}
      end;
    end;
      

  2.   

    我就是用了一搂的那种方法,问题解决不了,才想读到流中的。因为txt文件是UTF8格式,里面有些东西stringlist不认识,不用流的话,我想先把格式转换后,再赋给stringlist.text,再用count去循环查找,如果我想转换,请问怎么转换, 我想在代码里转换,因为有很多个txt,用另存为是不行的,所以想用代码转换。不知道怎么搞。
      

  3.   

    const
      BuffSize = 2048;
      CONST_REPLACE_STR = 'Input';
      KeyStrLen = 3; //lenght(CONST_REPLACE_STR);
    var
      FSM: TFileStream;
      Str1, Str2, FFileName: string;
      Len, i, allcount: integer;
    begin
      allcount := 0;
      Str2 := '';
      FSM := TFileStream.Create(FFileName, fmOpenRead);
      try
        FSM.Seek(0, soFromBeginning);
        while FSM.Position < FSM.Size do begin
          setlength(Str1, BuffSize);
          Len := FSM.Read(Str1[1], BuffSize);
          if Len < BuffSize then setlength(Str1, len);
          Str2 := Str2 + Str1;
          i := pos(CONST_REPLACE_STR, str2);
          while i > 0 do begin
            delete(Str2, 1, i + length(CONST_REPLACE_STR));
            inc(allcount);
            i := pos(CONST_REPLACE_STR, str2);
          end;
        end;
      finally
        FSM.Free;
      end;
    end;