procedure TForm1.Button2Click(Sender: TObject);
var
  astr:String;
begin
  Memo1.Lines.LoadFromFile('c:\a.txt');
  repeat
    if Memo1.Lines.Strings[Memo1.Lines.Count-1]='' then
      Memo1.Lines.Delete(Memo1.Lines.Count-1);
  until Memo1.Lines.Strings[Memo1.Lines.Count-1]<>'';
  Memo1.Lines.SaveToFile('c:\a.txt');
end;

解决方案 »

  1.   

    使用memo有个问题就是如果文本的内容大于64K,后面的内容会被截掉,还是用RichEdit吧.
      

  2.   

    你也可以直接用TStringList组件。
      

  3.   

    能否不使用memo或RichEdit控件?因为并不需要查看,只要进行操作就行。
      

  4.   

    我不明白文本文件的一行末没有回车和有回车是怎么一回事,没有回车时说明这一行没有完啊,不过一行后多几个回车是存在的,即有几个空行。根据我的理解,我用标准的Pascal语言写了下面一段程序,希望对你有所帮助:
    var fn1,fn2:Text;
        st:String;  i:integer;
    begin
        Assign(fn1,SouceFileName);
        Reset(fn1);
        Assign(fn2,TarGetFileName);
        ReWrite(fn2);
        While not eof(fn1) do
        begin
          Readln(Fn1,st);   //读出一行
          if st<>'' then    //如果是一空行,则是多出的回车符,则去掉
         Writeln(fn2,st);
        end;
        close(fn1);
        close(fn2);
    end;
      

  5.   

    我想你是对文本的最后一个字符进行判断吧?那么测试edit1.text的最后一个文本字符是什么就可以了,采用pos可以判断最后一个字符是不是文本,然后进行处理。
      

  6.   

    如果不想用显式的RTF或者Memo控件,就可以直接利用TStringList组件,利用
    obj:=TStringList.Create 动态建立
      

  7.   

    var
      s:string;
      fs:TFileStream;
    begin
      if Opendialog1.Execute then
      begin
        fs := TFileStream.Create(OpenDialog1.FileName,fmOpenReadWrite);
        try  
          fs.Position := 0;
          setLength(s,fs.Size);  //如果这个文件是0字节,要另外处理
          fs.Read(Pointer(s)^,fs.size);
          if s[fs.size] <> #13 then
          begin
            s := s+#13;
            fs.Write(Pointer(s)^,length(s));
          end;
        finally
          fs.Free;
        end;
      end;
    end;
      

  8.   

    我说清楚一点吧,请参考这段文字另外有部分檔案會無法讀取的原因
    是因為網路傳輸的關係
    部分伺服器會將文字檔的0x0d,0x0a多加個0x0d
    造成sade無法讀取
    解決方法就是用ultraedit開啟後在紀錄就可以執行了ultraedit會自動修正這一個問題我用16进制查看时发现0d 0a好像是回车或是换行符,所以才有了上面的提问,因为有一段时间不会来这里了,所以把分数全给完,大概是150左右吧,我会加分的,请大家继续帮助我.
    此文本文件的格式一般为
    鼠移 250 240
    左按 250 240
    延遲 1000
    //選擇送加加
    鼠移 250 180
    左按 250 180
    结束要求结束这个字符后有一空行,多余的去掉,少的添上.
      

  9.   

    var FStream:TMemoryStream;
        ch1,ch2:char; fn:text;
    begin
      FSTream:=TMemoryStream.create;
      Assignfile(fn,filename);
      Reset(fn);
      while not eof(fn) do
      begin
        read(fn,ch1);
        if ch1=#13 then   //是回车符?
         begin
           read(fn,ch2);
           if ch2=#10 then //换行符?
             begin         //正确换行
               FStream.Write(ch1,1);
               FStream.write(ch2,1);
             end
            else FStream.Write(ch2,1);  //则判断出ch1是多出的回车符,去掉它
         end;
      end;
      FStream.SaveToFile(TempFile);
    end;  
    写得匆忙,没有仔细检查,不过思路是这样的,我在检查北大方正的出版系统的文件格式时发现过这种现象,它的格式中就会多出一个符号,我也是这样把它去掉的
      

  10.   

    我把代码改进了,没有使用显式控件:procedure TForm1.Button1Click(Sender: TObject);
    var
      astr:String;
      sl:TStringList;
    begin
      sl:=TStringList.Create;
      try
        sl.LoadFromFile('c:\a.txt');
        repeat
          if sl.Strings[sl.Count-1]='' then
            sl.Delete(sl.Count-1);
        until sl.Strings[sl.Count-1]<>'';
        sl.SaveToFile('c:\a.txt');
      finally
        sl.Free;
      end;
    end;
      

  11.   

    API函数shellexecute:
    shellexecute(Self.Handle,nil,'c:\win2000\system32\notepad.exe',
            'c:\book.htm','c:\',SW_SHOW );
    打开文件'c:\book.htm',调用前需要在uses中加入shellapi