我用Opendialog打开一个txt文件,读取里面的数据,然后做一些修改,最后写到另一个txt文件中(有固定的路径),可是等我处理完后,发现原来的那个txt文件也被改变了,怎么回事啊?Opendialog的path为全局变量.请高手指教,谢谢!

解决方案 »

  1.   

    unit Unit3;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids, ADODB, ComCtrls;type
      TForm3 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Edit1: TEdit;
        Button3: TButton;
        Button4: TButton;
        OpenDialog1: TOpenDialog;
        SaveDialog1: TSaveDialog;
        Table1: TTable;
        ProgressBar1: TProgressBar;
        Label1: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
       private
        { Private declarations }
      public
        { Public declarations }  end;var
      Form3: TForm3;
      path:String;//因为多个按钮都要用到path的值
    implementationuses Unit4, import;{$R *.dfm}procedure TForm3.Button1Click(Sender: TObject);
    var
      Form1: TForm;
      sl: TStringList;
      infile:textfile;
      j,i: integer;
      s,d,ss,fname,instring: string;
    begin
       button3.click;
        fname:='D:\editransform1\data.txt';
        assignfile(infile,fname);
        rewrite(infile);    //利用rewrite清空原文本
       // append(infile);
       // instring:='';
       // writeln(infile,instring);
        closefile(infile);
      sl := TStringList.Create;
      sl.LoadFromFile(path);
      progressbar1.Min:=0;
      progressbar1.Max:=sl.Count;
      progressbar1.Step:=1;
      for i:=0 to sl.Count-1 do
      begin
        progressbar1.Position:=i;
        s:=sl[i];
        for j:=0 to Length(s) do
        begin
        if ((s[j]='?') and (s[j+1]='?')) then
        begin
        s[j]:=' ';
        d:=copy(s,1,j);
        ss:=copy(s,j+2,Length(s));
        s:=d+ss;
        end;
        end;
        fname:='D:\editransform1\data.txt';
        assignfile(infile,fname);
        //rewrite(infile);
        append(infile);
        instring:=s;
        writeln(infile,instring);
        closefile(infile);
      end;
      Form3.Hide;
      Form1:=TForm1.create(Application);
      Form1.ShowModal;
      end;procedure TForm3.Button2Click(Sender: TObject);
    begin
    application.Terminate;
    end;procedure TForm3.Button3Click(Sender: TObject); //去掉文件中的空行
    var
    s,d:Tstringlist;
    i,j:integer;
    ss,l:String;
    begin
    opendialog1.Execute;
    path:=opendialog1.Files[0];
    s:=Tstringlist.Create;
    d:=Tstringlist.Create;
    //s.LoadFromFile('D:\editransform1\data1.txt');
    s.LoadFromFile(path);//读取原始报文
    for i:=0 to s.Count-1 do
    begin
      ss:=s[i];
      l:=copy(ss,1,2);
      if ((length(s[i])<5) or (l='47')) then
      else
      d.Add(s[i]);
    end;
     //d.SaveToFile('D:\editransform1\data1.txt');
     d.SaveToFile(path);
    end;procedure TForm3.Button4Click(Sender: TObject);
    var
      s: string;
      sl:Tstringlist;
      i:integer;
    begin
      sl := TStringList.Create;
      sl.LoadFromFile('D:\editransform1\data5.txt');
      for i:=0 to sl.Count-1 do
      begin
        s:=sl[i];
        Table1.Active:=True;
        Table1.Append;
        Table1.Fields[0].AsString:=s;
        Table1.Post;
      end;end;end.
      

  2.   

    又用TStringList,又用writeln写文件,看到头晕了....
    自己跟踪一下,看看是不是这里将path文件给覆盖了
    s.LoadFromFile(path);
    ....
    d.SaveToFile(path);
      

  3.   

    我跟踪了一下,button1中的s在变得时候,button3中的s也跟着变,又不是全局变量,怎么会变呢?