StartprogrammingusingObjectPascal:CarsDatabaseProgram
자동차 데이터베이스 프로그램
Program CarRecords;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils
{ you can add units after this };
type
TCar = record
ModelName: string[20];
Engine: Single;
ModelYear: Integer;
end;
var
F: file of TCar;
Car: TCar;
begin
AssignFile(F, 'cars.dat');
if FileExists('cars.dat') then
begin
FileMode:= 2; // Open file for read/write
Reset(F); // open file
Writeln('File already exist, opened for append');
// Display file records
while not Eof(F) do
begin
Read(F, Car);
Writeln;
Writeln('Car # ', FilePos(F), ' --------------------------');
Writeln('Model : ', Car.ModelName);
Writeln('Year : ', Car.ModelYear);
Writeln('Engine: ', Car.Engine);
end
end
else // File not found, create it
begin
Rewrite(F);
Writeln('File does not exist, created');
end;
Writeln('Please input car informaion, ',
'write x in model name to exit');
Writeln('File pointer position at record # ', FilePos(f));
repeat
Writeln('--------------------------');
Write('Input car Model Name : ');
Readln(car.ModelName);
if Car.ModelName <> 'x' then
begin
Write('Input car Model Year : ');
Readln(car.ModelYear);
Write('Input car Engine size: ');
Readln(car.Engine);
Write(F, Car);
end;
until Car.ModelName = 'x';
CloseFile(F);
Write('Press enter key to close..');
Readln;
end.
앞의 예제에서는 자동차 정보를 정의하기 위해 TCar 형식을 선언했습니다. 첫번째 필드(ModelName)는 문자열 변수지만, 최대 길이[20]를 제한했습니다.
ModelName: string[20];
파일에서 사용하기 전에 선언한 문자열 변수를 사용할텐데, 기본 ANSI 문자열 변수는 메모리에서 제각각의 제한이 없는 저장 형태를 지니고 있지만, 형식화 된 파일에 대해서는 모든 데이터 형의 폭을 정하는 것이 좋기 때문입니다.