StartprogrammingusingObjectPascal:CreatingAndWritingIntoTextFile
텍스트 파일 만들고 기록하기
var
FileName: string;
F: TextFile;
Line: string;
ReadyToCreate: Boolean;
Ans: Char;
i: Integer;
begin
Write('Input a new file name: ');
Readln(FileName);
// Check if file exists, warn user if it is already exist
if FileExists(FileName) then
begin
Write('File already exist, did you want to overwrite it? (y/n)');
Readln(Ans);
if upcase(Ans) = 'Y' then
ReadyToCreate:= True
else
ReadyToCreate:= False;
end
else // File does not exist
ReadyToCreate:= True;
if ReadyToCreate then
begin
// Link file variable (F) with physical file (FileName)
AssignFile(F, FileName);
Rewrite(F); // Create new file for writing
Writeln('Please input file contents line by line, '
, 'when you finish write % then press enter');
i:= 1;
repeat
Write('Line # ', i, ':');
Inc(i);
Readln(Line);
if Line <> '%' then
Writeln(F, Line); // Write line into text file
until Line = '%';
CloseFile(F); // Release F and FileName connection, flush buffer
end
else // file already exist and user does not want to overwrite it
Writeln('Doing nothing');
Write('Press enter key to close..');
Readln;
end.
이 예제에서는 많은 중요한 것들을 사용했습니다.
1. Boolean 형식:
ReadyToCreate: Boolean;
이 형식은 True값과 False값 둘 중 하나만 유지할 수 있습니다. 이 값들은 if 조건문, while 순환문 또는 repeat 순환문에서 바로 사용할 수 있습니다.
앞의 예제에서 다음과 같은 if 조건문을 사용했습니다.
if Marks[i] > Max then
여기서도 True 또는 False를 되돌립니다.
2. upcase 함수:
if upcase(Ans) = 'Y' then
이 구문은 파일이 존재할 때 실행합니다. 프로그램은 기존의 파일에 덮어쓸 것인지에 대한 여부를 사용자에게 경고할 것입니다. 사용자가 계속하기를 원한다면, 소문자 y나 대문자 Y를 입력할 것입니다. upcase 함수는 입력한 문자가 소문자인 경우 대문자로 바꿀 것입니다.
3. Rewrite 프로시저:
Rewrite(F); // Create new file for writing
Rewrite 프로시저는 새로운 빈 파일을 만들 때 사용합니다. 파일이 이미 존재한다면, 지우고 덮어쓸 것입니다. 텍스트 파일인 경우 쓰기 전용으로도 엽니다.
4. Writeln(F, .. ) 프로시저:
Writeln(F, Line); // Write line into text file
이 프로시저는 텍스트 파일에 문자열이나 변수를 기록하고, 이들 데이터에 숫자 13과 10으로 각각 표현되는 캐리지 리턴/라인 피드의 조합인 줄의 마지막 문자를 붙이기 위해 사용합니다.
이 문자들은 콘솔 창에 표시할 수 없지만, 화면에 나타나는 커서를 새로운 줄로 이동할 것입니다.
5. Inc 프로시저:
Inc(i);
이 프로시저는 정수형 변수를 1만큼 증가합니다. 다음 구문과 같습니다.
i := i + 1;
6. CloseFile 프로시저:
CloseFile(F); // Release F and FileName connection
앞서 보신 바와 같이, CloseFile 프로시저는 운영체제로 파일을 놓아둡니다. 덧붙이자면, 텍스트 파일에 기록할 때 기록버퍼를 비우는 추가적인 작업을 수행합니다.
텍스트 파일의 버퍼링은 텍스트 파일을 빠르게 다루게 해주는 기능입니다. 단일 줄이나 문자를 디스크나 다른 저장 매체에 바로 기록(메모리에 기록하는 것과 비교했을 때 매우 느립니다)하는 대신에, 프로그램은 이 항목들을 메모리 버퍼에 기록할 것입니다. 버퍼가 거의 가득 찼을 때, 하드 디스크와 같은 영구 저장 매체에 몰아 넣습니다(강제로 기록합니다). 이 동작은 기록을 빠르게 해주지만, 전원이 갑자기 나갔을 경우 (버퍼에 있는)데이터들을 잃을 수 있는 위험성을 더할 것입니다. 데이터 손실을 최소화하기 위해, 파일에 기록을 끝내고 나서 바로 파일을 닫아주거나 버퍼를 명시적으로 비우기 위해 Flush 프로시저를 호출할 것입니다.