数据采集系统,每秒采100组数据,我现在是保存在数组里,时间到了再一次性保存,请问怎样才能实现数据实时保存为文本文件呢?

解决方案 »

  1.   

    用内存流来操作
    每调加一条,writ进一条,然后适当时间savetofile(**.txt)
    需要的时候再用内存流读txt文件,一个记录一个记录导入数据库
    注意:writ新的一条记录的时候,要先设流位置为最后,不然不会调加,反而会覆盖掉之前的
    读出来存数据库的时候,循环一条一条读
      

  2.   

    能否给段代码参考一下,我菜鸟一个,delphi还不是太熟啊
      

  3.   

    如果你要将数据存为TXT,可用TStringList,给你个EX,如果你每组数据有三个(double型),共100组,可这样:
    var
      i:integer;
      t:tstringlist;
      d :array [1..100,1..3] of double;
    begin
    //采数据到d
      t:=tstringlist.Create;
      for  i:=1 to 100 do
         t.Add(format('%.2f,%.2f,%.2f',[d[i,1],d[i,2],d[i,3]])); //文件格式类似 3.22,4.55,6.33
      t.savetofile('c:\test.dat'); //共100行写入文件c:\test.dat中
      t.free;
    end;
      

  4.   

    请教keiy一下,用TStringList是出于效率考虑呢?还是为了减少代码?
      

  5.   

    多谢楼上几位,我按keiy的指点,写了一个小例子,可以实时保存,但还有个问题,怎样才能让t保存完一次就free一次,下次再保存时又不会覆盖掉dat文件中上一次的记录呢?procedure CallBack(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);stdcall;
    begin
       inc(i);
       s:= inttostr(i)+'        '+timetostr(time);
       t.Add(s);
       t.savetofile('c:\'+aa+'.dat');
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
       aa:=formatdatetime('yyyy-mm-dd-hh-mm-ss',now);
       if  tID=0   then   tID:=TimeSetEvent(10,1,CallBack,0,1);
       t:=tstringlist.Create;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
         TimeKillEvent(tID);
         t.free;
         tID:=0;
    end;
      

  6.   

    TStream TStringList
    皆可
    使用他们的SaveToFile方法就行了
    如果是多线程的话 那就要考虑LockList的问题了.