Delphi 텍스트 읽기 및 쓰기 파일

43010 단어 Delphi
텍스트 파일 읽기 및 쓰기
선언: Delphi는 텍스트 파일, 레코드 파일, 유형 없는 세 가지 파일 유형을 지원합니다.텍스트 파일은 비헤이비어 단위로 읽기, 쓰기됩니다.각 줄의 길이가 반드시 같지 않기 때문에 주어진 줄이 파일의 정확한 위치를 계산할 수 없기 때문에 순서대로 읽기와 쓰기만 할 수 있다.텍스트 파일은 읽기나 쓰기만 할 수 있으며, 열린 텍스트 파일에서 읽기와 쓰기를 동시에 할 수 없습니다.텍스트 파일을 열려면 다음 두 단계가 필요합니다. 1.파일 변수는 파일 이름과 연결됩니다.2. 읽기와 쓰기를 초기화합니다.1. 파일 변수가 파일 이름과 연관됨: AssignFile(VarTxt, FileName);FileName 경로를 생략하면 현재 디렉토리가 기본값으로 설정됩니다.2. 읽기와 쓰기를 초기화하는 데는 세 가지 방법이 있다. (1) Reset: 읽기만 하고 열면 바늘을 파일 헤더로 옮긴다.(2) Rewrite: 새 파일을 만들고 열고 쓰기만 합니다.(3) Append: 끝에서 추가되며 포인터는 당연히 파일 끝에 있습니다.파일이 존재하지 않을 때 Reset 또는 Append를 사용하면 입출력 예외가 발생합니다.마지막으로 CloseFile을 사용하여 파일을 닫습니다.Delphi는 호환성을 유지하기 위해 Assign을 사용하여 연관을 설정하고 Close를 사용하여 파일을 닫을 수도 있습니다.
//    :

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  F: Text;  //TextFile   Text     
  FileName: string = 'c:/temp/test.txt';

//   
procedure TForm1.Button1Click(Sender: TObject);
begin
  AssignFile(F,FileName);
  Rewrite(F);  //         

  Writeln(F, '   ');
  Writeln(F, '   ');

  CloseFile(F);
end;

//   (      )
procedure TForm1.Button2Click(Sender: TObject);
var
  s: string;
begin
  AssignFile(F,FileName);
  Reset(F);  //    

  Readln(F, s);   //  
  ShowMessage(s); //  :    
  Readln(F, s);   //    
  ShowMessage(s); //  :    

  CloseFile(F);
end;

//  
procedure TForm1.Button3Click(Sender: TObject);
begin
  AssignFile(F,FileName);
  Append(F);  //      

  Writeln(F, '   ');
  Writeln(F, '   ');

  CloseFile(F);
end;

//    (  Memo    )
procedure TForm1.Button4Click(Sender: TObject);
var
  s: string;
begin
  AssignFile(F,FileName);
  Reset(F);  //    

  Memo1.Clear;
  while not Eof(F) do
  begin
    Readln(F, s);
    Memo1.Lines.Add(s);
  end;

  CloseFile(F);
end;

//    
procedure TForm1.Button5Click(Sender: TObject);
  //           :      s    n    
  function AddSpace(s: string; n: Word): string;
  begin
    while Length(s) < n do
    begin
      s := s + ' ';
    end;
    Result := s;
  end;
var
  name: string[8];
  address: string[16];
begin
  AssignFile(F, FileName);
  Rewrite(F);

  name := '  ';
  name := AddSpace(name,8);
  address := '    ';
  address := AddSpace(address,16);
  Writeln(F, name, address);

  name := '   ';
  name := AddSpace(name,8);
  address := '        ';
  address := AddSpace(address,16);
  Writeln(F, name, address);

  name := '    ';
  name := AddSpace(name,8);
  address := '      ';
  address := AddSpace(address,16);
  Writeln(F, name, address);

  CloseFile(F);
{      :
            
               
            
}
end;

//    
procedure TForm1.Button6Click(Sender: TObject);
var
  name: string[8];
  address: string[16];
begin
  AssignFile(F, FileName);
  Reset(F);

  Memo1.Clear;
  while not Eof(F) do
  begin
    Readln(F, name);
    Memo1.Lines.Add(name);
  end;

  CloseFile(F);
  Reset(F);

  while not Eof(F) do
  begin
    Readln(F, name, address);
    Memo1.Lines.Add(address);
  end;

  CloseFile(F);
{    :
        
       
      
              
          
            
}
end;

//            
procedure TForm1.Button7Click(Sender: TObject);
var
  name: string[6];
  age: Word;
  birthday: TDate;
begin
  AssignFile(F,FileName);
  Rewrite(F);

  name := '    ';  //       6   
  age := 18;
  birthday := StrToDate(DateToStr(Now-18*365));  //        
  Writeln(F,name,age,birthday);

  CloseFile(F);
  Reset(F);

  Readln(F,name,age,birthday);
  Memo1.Clear;
  Memo1.Lines.Add(name);
  Memo1.Lines.Add(IntToStr(age));
  Memo1.Lines.Add(DateToStr(birthday));

  CloseFile(F);

{    :
    
  18
  1989-12-23
}
//                   ,                 ?
end;

end.
구조화된 파일 액세스
개요: AssignFile: Rewrite 연결: 새 파일을 만들고 엽니다. 존재하는 경우 Reset: 존재하는 파일을 덮어씁니다.추가도 그것으로 먼저 열고 바늘을 움직여야 한다.Append는 텍스트 파일 전용의 CloseFile: FileSize 닫기: 기록수 FilePos: 파일의 현재 위치를 되돌려줍니다 Seek: 파일 포인터를 지정한 위치로 이동합니다 (구조화된 파일에만 사용) Eof: 파일 끝 Read: 읽기 Write: 쓰기: 긴 문자열, 변수, 클래스 실례, 인터페이스 또는 동적 그룹을 포함하는 기록은 형식 파일에 쓸 수 없습니다!
//    :
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
  TPersonRec = packed record
    name: string[12];
    age: Word;
    birthday: TDate;
  end; //       

var
  DataFile: file of TPersonRec;  //   DataFile      TPersonRec     
  PersonRec: TPersonRec;  //      
  FileName: string = 'c:/temp/test.dat';  //       


//       
procedure TForm1.Button1Click(Sender: TObject);
begin
  AssignFile(DataFile,FileName);  //    
  Rewrite(DataFile);  //    ,        

  PersonRec.name := '  ';
  PersonRec.age := 18;
  PersonRec.birthday := StrToDate('1990-1-1');
  Write(DataFile,PersonRec);  //  

  PersonRec.name := '   ';
  PersonRec.age := 81;
  PersonRec.birthday := StrToDate('1927-11-11');
  Write(DataFile,PersonRec);  //  

  CloseFile(DataFile);  //  
end;


//    
procedure TForm1.Button2Click(Sender: TObject);
begin
  AssignFile(DataFile,FileName);
  Reset(DataFile);  //Append       
  Seek(DataFile,FileSize(DataFile));  //     ,     FileSize         

  PersonRec.name := '    ';
  PersonRec.age := 1;
  PersonRec.birthday := StrToDate('2006-12-19');
  Write(DataFile,PersonRec);

  PersonRec.name := '  ';
  PersonRec.age := 2000;
  PersonRec.birthday := StrToDate('0007-7-7');
  Write(DataFile,PersonRec);

  CloseFile(DataFile);

end;


//    ( Memo     )
procedure TForm1.Button3Click(Sender: TObject);
begin
  AssignFile(DataFile,FileName);
  Reset(DataFile);

  Memo1.Clear;
  Read(DataFile,PersonRec);  //    ,          
  Memo1.Lines.Add(PersonRec.name);
  Memo1.Lines.Add(IntToStr(PersonRec.age));
  Memo1.Lines.Add(DateToStr(PersonRec.birthday));

  Read(DataFile,PersonRec);  //     
  Memo1.Lines.Add(PersonRec.name);
  Memo1.Lines.Add(IntToStr(PersonRec.age));
  Memo1.Lines.Add(DateToStr(PersonRec.birthday));

  Seek(DataFile,FileSize(DataFile)-1);  //        
  Read(DataFile,PersonRec);
  Memo1.Lines.Add(PersonRec.name);
  Memo1.Lines.Add(IntToStr(PersonRec.age));
  Memo1.Lines.Add(DateToStr(PersonRec.birthday));

  CloseFile(DataFile);

{    :
    
  18
  1990-1-1
     
  81
  1927-11-11
    
  2000
  0007-7-7
}
end;


//    
procedure TForm1.Button4Click(Sender: TObject);
begin
  AssignFile(DataFile,FileName);
  Reset(DataFile);

  Seek(DataFile,3);  //       
  Read(DataFile,PersonRec);  //  
  PersonRec.age := 0;
  PersonRec.birthday := StrToDate('2007-10-24');

  Seek(DataFile,3);  //       
  Write(DataFile,PersonRec);  //  

  CloseFile(DataFile);
end;


//      
procedure TForm1.Button5Click(Sender: TObject);
begin
  AssignFile(DataFile,FileName);
  Reset(DataFile);

  Memo1.Clear;
  while not Eof(DataFile) do
  begin
    Memo1.Lines.Add('  ' + IntToStr(FilePos(DataFile)+1) + '  :');
    Read(DataFile,PersonRec);
    Memo1.Lines.Add(PersonRec.name);
    Memo1.Lines.Add(IntToStr(PersonRec.age));
    Memo1.Lines.Add(DateToStr(PersonRec.birthday));
    Memo1.Lines.Add('');  //    
  end;

  CloseFile(DataFile);

{    :
    1  :
    
  18
  1990-1-1

    2  :
     
  81
  1927-11-11

    3  :
      
  1
  2006-12-19

    4  :
    
  0
  2007-10-24
}

end;

end.
 
     
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  FileName = 'c:/temp/binary.dat';
var
  F: file;

//             
procedure TForm1.Button1Click(Sender: TObject);
var
  b: Byte;
begin
  AssignFile(F,FileName);
  Rewrite(F,1); //       :   1            

  b := 65;
  BlockWrite(F,b,1); //  ;   2       ;   3     1  .

  CloseFile(F);
//   binary.dat    : 1   ;   : A (       )
end;


//             
procedure TForm1.Button2Click(Sender: TObject);
var
  b: Byte;
begin
  AssignFile(F,FileName);
  Reset(F,1); //  1            

  BlockRead(F,b,1); //    ;    b
  ShowMessage(Chr(b)); //A

  CloseFile(F);
end;


//      
procedure TForm1.Button3Click(Sender: TObject);
var
  buffer: array[0..127] of Byte;
  i: Integer; //      ,       
begin
  for i := Low(buffer) to High(buffer) do
    buffer[i] := i; //     ,           128

  AssignFile(F,FileName);
  Rewrite(F,32); //    32            ,                    

  BlockWrite(F,buffer,4); //       ? 128/32=4

  CloseFile(F);
//        128    ,           ,            
end;


//  
procedure TForm1.Button4Click(Sender: TObject);
var
  buffer: array[0..127] of Byte;
  i: Integer;
begin
  AssignFile(F,FileName);
  Reset(F,4); //  4           ;         ,       1

  BlockRead(F,buffer,32); //     32      

  CloseFile(F);

  //       ?     Memo  ;     ?   ?        
  Memo1.Clear;
  for i := Low(buffer) to High(buffer) do
  begin
    Memo1.Lines.Add(IntToHex(buffer[i],1));
  end;
(*    : 0 1 2 3 ... 7D 7E 7F *)

end;


//   Char        
procedure TForm1.Button5Click(Sender: TObject);
var
  cArr1,cArr2: array[0..4] of Char;
  i: Integer;
  num: Integer; //          
begin
  for i := Low(cArr1) to High(cArr1) do
    cArr1[i] := Chr(65+i); //   A B C D E

  AssignFile(F,FileName);
  Rewrite(F,1); //  

  BlockWrite(F,cArr1,Length(cArr1),num); //  4: num          
  ShowMessage(IntToStr(num)); //5

  Reset(F,1); //    

  BlockRead(F,cArr2,Length(cArr2),num); //  5: num          
  ShowMessage(IntToStr(num)); //5

  ShowMessage(cArr2); //ABCDE

  CloseFile(F);
end;


//      ,         
procedure TForm1.Button6Click(Sender: TObject);
var
  p: PChar;
  b: Byte;
begin
  p := '    Delphi   ';

  AssignFile(F,FileName);     //     
  Rewrite(F,1);               //     
  BlockWrite(F,p,Length(p));  //  


  FileMode := fmOpenRead;     //          
  Reset(F,1);                 //     

  Memo1.Clear;
  while not Eof(F) do
  begin
    BlockRead(F,b,1);
    Memo1.Text := Memo1.Text + IntToHex(b,2) + ' ';
  end;
  //    : 70 F0 45 00 08 F7 12 00 A6 FB 43 00 A0 1A E5 00 FF C5

  CloseFile(F);
end;


//     
procedure TForm1.Button7Click(Sender: TObject);
var
  FromF,ToF: file;
  NumRead,NumWritten: Integer;
  Buffer: array[1..2048] of Byte;
begin
  AssignFile(FromF, 'c:/temp/test1.dat'); //       
  Reset(FromF, 1);
  AssignFile(ToF, 'c:/temp/test2.dat');
  Rewrite(ToF, 1);

  repeat
    BlockRead(FromF, Buffer, SizeOf(Buffer), NumRead);
    BlockWrite(ToF, Buffer, NumRead, NumWritten);
  until (NumRead = 0) or (NumWritten <> NumRead);
  { NumRead=0      ; NumWritten <> NumRead           }

  CloseFile(FromF);
  CloseFile(ToF);
end;

end.

좋은 웹페이지 즐겨찾기