StartprogrammingusingObjectPascal:CreatingAndWritingIntoTextFile
Jump to navigation
Jump to search
텍스트 파일 만들고 기록하기
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.
이 예제에서는 많은 중요한 요소들을 사용했습니다.
- Boolean 형식:이 형식은 True값과 False값 둘 중 하나만 유지할 수 있습니다. 이 값들은 if 조건문, while 순환문 또는 repeat 순환문에서 바로 사용할 수 있습니다.
ReadyToCreate: Boolean;
앞의 예제에서 다음과 같은 if 조건문을 사용했습니다.여기서도 True 또는 False를 반환합니다.if Marks[i] > Max then
- upcase 함수:이 구문은 파일이 존재할 때 실행됩니다. 프로그램은 기존의 파일에 덮어쓸 것인지에 대한 여부를 사용자에게 경고할 것입니다. 사용자가 계속하기를 원한다면, 소문자 y나 대문자 Y를 입력할 것입니다. upcase 함수는 입력한 문자가 소문자인 경우 대문자로 바꿀 것입니다.
if upcase(Ans) = 'Y' then
- Rewrite 프로시저:Rewrite 프로시저는 새로운 빈 파일을 만들 때 사용합니다. 파일이 이미 존재한다면, 지우고 덮어쓸 것입니다. 텍스트 파일인 경우 쓰기 전용으로도 엽니다.
Rewrite(F); // Create new file for writing
- Writeln(F, .. ) 프로시저:이 프로시저는 텍스트 파일에 문자열이나 변수를 기록하고, 이들 데이터의 마지막에 ASCII CODE 13번과 10번으로 표현 하는 줄바꿈 문자인 캐리지 리턴/라인 피드의 조합(CR/LF)을 붙이기 위해 사용합니다.
Writeln(F, Line); // Write line into text file
이 문자들은 콘솔 창에 표시되는건 아니지만, 화면에 나타나는 커서를 새로운 줄로 이동할 것입니다. - Inc 프로시저:이 프로시저는 정수형 변수를 1만큼 증가합니다. 다음 구문과 같습니다.
Inc(i);
i := i + 1;
- CloseFile 프로시저:앞서 보신 바와 같이, CloseFile 프로시저는 운영체제로 파일을 돌려줍니다. 덧붙여서, 텍스트 파일에 기록할 때 기록버퍼를 비우는 추가적인 작업을 수행합니다.
CloseFile(F); // Release F and FileName connection
텍스트 파일의 버퍼링은 텍스트 파일을 빠르게 다루게 해주는 기능입니다. 단일 줄이나 문자를 디스크나 다른 저장 매체에 바로 기록(메모리에 기록하는 것과 비교했을 때 매우 느립니다)하는 대신에, 프로그램은 이 항목들을 메모리 버퍼에 기록할 것입니다. 버퍼가 거의 가득 찼을 때, 하드 디스크와 같은 영구 저장 매체에 몰아 넣습니다(강제로 기록합니다). 이 동작은 기록을 빠르게 해주지만, 전원이 갑자기 나갔을 경우 (버퍼에 있는)데이터들을 잃을 수 있는 위험성을 더할 것입니다. 데이터 손실을 최소화하기 위해, 파일에 기록을 끝내고 나서 바로 파일을 닫아주거나 버퍼를 명시적으로 비우기 위해 Flush 프로시저를 호출할 것입니다.