D7,在某个文本文件中找某串字符串,如果找到就退出,找不到就再找另外一个字符串,然后将该字符串删除,再添加新字符串进去,然后保存重写要求!DELPHI 7.0,我要从一个文本文件中读取N行字符,然后从中找出指定的某串字符(字符串A),如果某个指定的字符串(字符串A)存在,则结束程序,如果不存在(字符串A),则再找字符串B,然后将这串字符(字符串B)删除,再在相同位置添加另一串字符(字符串C),再保存文本文件:c:\a.txt
文本文件内容包括多行:abc
dke,coodke
wek中文国国际dsnck
ew,dk
cccc
dddd我需要查找的字符串(字符串A)也包括多行haha1111
未能找到上述字符串,判定该字符串不存在,则再找cccc然后将上述字符串替换为
china_dsnck
ew,dk然后保存,文本文件的最终内容为:abc
dke,coodke
wek中文国国际dsnck
ew,dk
china_dsnck
ew,dk
dddd上述要求用 DELPHI 7 如何实现?
以上只是举例来说,实际情况中上述字符串都是超过 1K 字节的,有的甚至超过10K。
该如何实现?procedure TForm1.Button1Click(Sender: TObject);
var
  l:tstringlist;
  s1,s2:string;
  i,j:integer;
begin
   s1 := 'haha1111';
   s2 := 'cccc';
   l := tstringlist.Create;
   l.LoadFromFile('a.txt');
   for i := 0  to l.Count - 1 do
   begin
     j:= pos(s1,l.Strings[i]);
     if j > 0 then break
     else stringreplace(l.Strings[i],s2,'china_dsnck#13#10ew,dk',[rfReplaceAll]);
   end;
   l.SaveToFile('a.txt');
end;有人提供上述方案,但是提示STRING 不能超过 255 个字节能否用 strimgstream 来实现?如何实现?

解决方案 »

  1.   

    还有这行逻辑是不是正确?else stringreplace(l.Strings[i],s2,'china_dsnck#13#10ew,dk',[rfReplaceAll]);我是要在 S1 找不到的情况下再从头找一遍 S2 然后再删除S2,然后再添加 S3 ,这里好像只是在每一行都替换一遍吧?可是我的 S1 中是包含换行符的,不在一行中用替换不能解决呀?
      

  2.   

    在上面的思路下继续的话,可以把你搜索的那些超过255个字符串分解,例如
    查找abcdefgh
    先找前255个,ab,找到就再后边的串中继续。。找不到,就肯定没有了。如果不用POS,你就一个一个字符的去匹配。
      

  3.   

    谁说string不能超过255?!
    procedure TForm1.Button7Click(Sender: TObject);
    var
            mStr:string;
            mStr2:string;
            i:integer;
    begin
            mStr := '';
            mStr2 := '';
            for i:=1 to 1000 do
                    mStr:=mStr+ IntToStr(i mod 10);
            for i:= 1 to 10 do
                    mStr2 := mStr2 + mStr;
            Memo1.Lines.Add(mStr2);
    end;当然,如果直接赋值,例如:mStr:='aksjfdksfldfd......'的话,是不能超过255的,但如果是mStr := 'alkdjfslkjf......' + 'kldsjflksjdflksjf....'的话,就可以达到ansistring的范围。
      

  4.   

    procedure TForm1.Button8Click(Sender: TObject);
    var
            mStrList: TStrings;
            mStr: string;
    begin
            mStrList := TStringList.Create;
            mStrList.LoadFromFile('aa.txt');
            mStr := mStrList.Text;
            //开始使用Pos和PosEx进行查找
            //......
            //
            mStrList.Destroy;
    end;