全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2072
推到 Plurk!
推到 Facebook!

*.TXT檔案內資料 如何將三天前資料刪除再存檔

尚未結案
kay617
一般會員


發表:5
回覆:4
積分:1
註冊:2004-06-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-12-05 14:01:27 IP:211.72.xxx.xxx 未訂閱
2005/12/01 15:52:40:739, TEST 2005/12/01 15:58:33:627, TEST 2005/12/01 15:58:37:372, TEST 2005/12/01 15:58:38:594, TEST 2005/12/01 15:58:38:814, TEST 2005/12/01 15:58:38:994, TEST 2005/12/01 15:58:39:185, TEST 2005/12/01 15:58:39:365, TEST 2005/12/02 15:58:39:525, TEST 2005/12/02 15:58:39:746, TEST 2005/12/02 15:58:39:916, TEST 2005/12/02 15:58:40:106, TEST 2005/12/02 15:58:40:427, TEST 2005/12/02 15:58:40:617, TEST 2005/12/02 15:58:45:434, TEST 2005/12/02 15:58:45:614, TEST 2005/12/02 15:58:45:804, TEST 2005/12/02 15:58:45:995, TEST 2005/12/03 15:58:46:145, TEST 2005/12/03 15:58:46:335, TEST 2005/12/03 15:58:46:475, TEST 2005/12/03 15:58:46:665, TEST 2005/12/03 15:58:46:856, TEST 2005/12/03 15:58:47:46, TEST 2005/12/03 15:58:47:136, TEST 2005/12/03 15:58:47:387, TEST 2005/12/03 15:58:47:577, TEST 2005/12/03 15:58:47:737, TEST 2005/12/03 15:58:48:348, TEST 2005/12/03 15:58:48:819, TEST 2005/12/04 15:58:48:989, TEST 2005/12/04 15:58:49:930, TEST 2005/12/04 15:58:50:120, TEST 2005/12/04 15:58:50:281, TEST 2005/12/04 15:58:50:481, TEST 2005/12/05 10:45:10:825, TEST . . . . 我的*.Txt檔內會依日期時間一直記錄資料 但是因為檔案有數百個 要定時清理 比如上面的檔案內容 我要刪除2005/12/03前的資料 這樣*.Txt才不會無限長大 我有想過用TstringList操作 但是還是想不到快一點的方法 各位先知 可以幫忙一下嗎 感恩不盡ㄚ
huwk
資深會員


發表:26
回覆:340
積分:323
註冊:2002-04-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-12-05 17:36:16 IP:211.21.xxx.xxx 未訂閱
若是不分檔做的話.建議可以將你記錄結構改成 2005/12/01 15:52:40:739, TEST 15:58:33:627, TEST . . 2005/12/02 15:58:39:525, TEST AND你要刪檔時,可以用IndexOf傳你要保留的那個日期,回傳值為他所在的列 此時再配合由大到小的迴圈,且配合DELETE的指令,即可以較快速的刪除! 因為少每列取值且比對的時間
------
熊的學習 http://huwk.blogspot.com
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-12-05 19:05:24 IP:220.130.xxx.xxx 未訂閱
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, LMDCustomComponent, LMDContainerComponent, LMDBaseDialog, LMDDirDlg, StdCtrls;    type
  TForm1 = class(TForm)
    Button1: TButton;
    LDD: TLMDDirDlg;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    function CreateFileList(Dir: string): TStringList;
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}    procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  F, FileList: TStringList;
  Key, SourceDir: string;
begin
  if LDD.Execute then
  begin
    SourceDir := LDD.Path;
    FileList := CreateFileList(LDD.Path);
    try
      Key := FormatDateTime('YYYY/MM/DD', Now-3);//三天前的日期
      for I := 0 to FileList.Count-1 do
      begin
        if FileExists(FileList[I]) then
        begin
          F := TStringList.Create;
          try
            F.LoadFromFile(FileList[I]);
            while F.Count > 0 do
                      if F[I] < Key then F.Delete(0) else Break;
            F.SaveToFile(FileList[I]);
          finally
            F.Free;
          end;
        end;
        Application.ProcessMessages;
      end;
    finally
       FreeAndNil(FileList);
    end;
  end;
end;    function TForm1.CreateFileList(Dir: string): TStringList;
        procedure CreatingFileList(SubDir: string);
var
  F: TSearchRec;
begin
  if FindFirst(SubDir '\*.*', faAnyFile, F) = 0 then
  repeat
    if (F.Name<>'.') and (F.Name<>'..') then
    begin
      if F.Attr and faDirectory = faDirectory then
                CreatingFileList(SubDir '\' F.Name)
      else
        if Pos('.TXT', UpperCase(F.Name)) > 0 then
         Result.Add(SubDir '\' F.Name);
      end;
    until FindNext(F) <> 0;
    FindClose(F);
  end;
begin
  Result := TStringList.Create;
  CreatingFileList(Dir);
end;    end.    
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-12-06 18:49:12 IP:61.219.xxx.xxx 未訂閱
HI kay617日安: 1.刪除前先備份 2.以EXCEL讀入此文字檔,不做欄位切割 3.EXCEL排序 4.選取要DELETE的資料列,右鍵刪除所選資料列 5.另存檔
fangwy
中階會員


發表:99
回覆:139
積分:62
註冊:2003-09-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-12-07 11:50:05 IP:218.5.xxx.xxx 未訂閱
我认为对文字档做处理都是比较耗时间的,如果一定要用文字档,可以考虑改改做法: 每天的数据存在一个文字档中,文字档命名为LOGyyyymmdd.txt(yyyymmdd为日期), 如果你要清2005/12/03之前的数据,将之前的文字日档删除就可能了,我想删除日档文件的处理比在文字档中删除过期的记录效率高. 当然,日档的做法也有不方便之处理,如你想在指定日期范围内找一笔记录,就不得不打开多个日档.
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-12-07 17:53:38 IP:61.219.xxx.xxx 未訂閱
您好, 我的想法是 1. 在 delphi 中開 excel 元件 2. 以 select * from 語法設 where dt>某個日期 條件, 把本文檔當成 csv 檔讀入. 3. 寫回本文檔 不知可行否
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-12-07 18:50:08 IP:220.130.xxx.xxx 未訂閱
大家好!
我之前建議處理的步驟:
1.CreateFileList: 
      用一個TStringList將SourceDir下,以及SourceDir之下所有子目錄的
      所有檔案一次產生Full Path的FileName List.    2.Iterate 所有檔案:
      @OpenFile->利用另一個TStringList.LoadFromFile(FileName[I]);
      @比較Key值並且刪除不要的資料;
      @SaveFile->叫用TStringList.SaveToFile(FileName[I]);    
***另外也可以運用Pos()來直接Locate到想要的資料位置,例如:
procedure ProcessData(L: TStringList; Key: string);
var
  P: Integer;
begin
  P := Pos(Key, L.Text);
  if P <> 0 then L.Text := Copy(L.Text,P 1,Length(L.Text));
end;    procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  F, FileList: TStringList;
  Key, SourceDir: string;
begin
  if LDD.Execute then
  begin
    SourceDir := LDD.Path;
    FileList := CreateFileList(LDD.Path);
    try
      Key := FormatDateTime('YYYY/MM/DD', Now-3);//三天前的日期
      F := TStringList.Create;
      try
        for I := 0 to FileList.Count-1 do
        begin
          Application.ProcessMessages;
          if FileExists(FileList[I]) then
          begin
            F.LoadFromFile(FileList[I]);
            ProcessData(F, Key);
            F.SaveToFile(FileList[I]);
          end;
        end;
      finally
        F.Free;
      end;
    finally
       FreeAndNil(FileList);
    end;
  end;
end;        
發表人 - jow 於 2005/12/07 18:57:08
kay617
一般會員


發表:5
回覆:4
積分:1
註冊:2004-06-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-12-08 08:14:39 IP:58.76.xxx.xxx 未訂閱
感謝各位的鼎力相助ㄚ  尤其是jOW 還相助了兩次 真的是辛苦啦 
系統時間:2024-05-17 10:57:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!