Delphi 레코드 파일 작업 - 회전

6413 단어 Delphi
이 예제에서는 TFileRec = record//레코드 정의 Day: Integer;...//기타 정의end;f: File of TFileRec//표준 입력/출력 파일 FilRec: TFileRec//레코드 데이터 FileName: 레코드 파일의 이름
4레코드 파일 관련 작업 정보 (1) 기록 파일의 열기 (2) 기록 파일의 읽기와 표시 (3) 기록의 증가 (4) 기록의 삭제 (5) 기록의 수정 (6) 기록 파일의 삭제
 
4레코드 파일 열기 필요한 방법:
  AssingFile(f, FileName);
  Reset(f); //             
  Rewrite(f); //         
  FileSize(f); //          

procedure OpenRecFile(const FileName: string; var f: TFileRec);
begin
  AssingFile(f, FileName);
  try
    Reset(f);
  except //           
    on EInOutError do
    begin
      try
        if FileExists(FileName) = False then //       ,  
          ReWrite(MethodFile)
        else //    ,     ,         
          MessageDlg('      ', mtWarning, [mbOK], 0);
      except //               
        on EInOutError do
          MessageDlg('      ', mtWarning, [mbOK], 0);
      end;
    end;
  end;
end;

 
4레코드 파일의 읽기 필요한 메서드 Read(f,FileRec);
procedure ReadData_FromRecFile;
begin
  for i := 1 to FileSize(f) do
  begin
    Read(f, FileRec); 
    ...//     (         )
  end;
end;

 
4기록의 증가 필요한 방법 Seek(f, RecNo);//RecNo는 위치를 정할 기록 번호 Write(f,FileRec)의 기본적인 사고방식을 대표한다. 지정된 기록의 위치를 가져오고 이 위치 뒤의 기록을 하나씩 뒤로 이동(1) 파일의 끝부분에 기록을 추가한다.
procedure InsertData_AtRecFile_Last(const Data: TFileRec); //       
begin
  Seek(f, FileSize(f));
  Write(f, Data);
end;
(2)
procedure InsertData_AtRecFile(const Index: Integer); 
//   const Data : TFileRec; 
//       
var
  nI: Integer;
begin
  if (Index > FileSize(f)) or (Index < 0) then
    Exit;
  for nI := FileSize(f) - 1 downto Index do
  begin
    seek(f, nI);
    read(f, FileRec);
    Seek(f, nI + 1);
    Write(f, FileRec);
  end;
  Seek(f, Index);
  Write(f, Data);
end;

레코드 삭제

Seek(f,Index); //Index
Write(f,FileRec)
Truncate(f) //

, 。 。

(1) 지정한 색인 번호의 기록 삭제
procedure DeleteData_FromRecFile(const Index: Integer);
var
  nI: Integer;
begin
  if (Index < 0) or (FileSize(f) = 0) then
    Exit;
  for nI := Index + 1 to FileSize(f) - 1 do
  begin
    seek(f, nI);
    read(f, FileRec);
    seek(f, nI - 1);
    Write(f, FileRec);
  end;
  Seek(f, FileSize(f) - 1);  //        
  Truncate(f);
end;

기록의 수정
procedure ModifyData_AtRecFile(const Index: Integer; const Data: TFileRec);
begin
  if (Index < 0) or (FileSize(f) = 0) or (Index > FileSize(f) - 1) then
    Exit;
  Seek(f, Index);
  Write(f, Data);
end;
레코드 파일 닫기
CloseFile(f);

좋은 웹페이지 즐겨찾기