StartprogrammingusingObjectPascal:ReadingTextFileProgram
텍스트 파일 읽기
이 예제에서는 사용자가 선택한 텍스트 파일의 내용을 표시할 것입니다. 예를 들어, 사용자가 윈도우즈에서 C:\test\first.pas, 또는 리눅스에서 /home/user/first.pas 와 같은 파일을 가지고 있다고 가정해봅니다.
Program ReadFile;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils
{ you can add units after this };
var
FileName: string;
F: TextFile;
Line: string;
begin
Write('Input a text file name: ');
Readln(FileName);
if FileExists(FileName) then
begin
// Link file variable (F) with physical file (FileName)
AssignFile(F, FileName);
Reset(F); // Put file mode for read, file should exist
// while file has more lines that does not read yet do the loop
while not Eof(F) do
begin
Readln(F, Line); // Read a line from text file
Writeln(Line); // Display this line in user screen
end;
CloseFile(F); // Release F and FileName connection
end
else // else if FileExists..
Writeln('File does not exist');
Write('Press enter key to close..');
Readln;
end.
리눅스에서는 다음 파일 이름을 입력할 수 있습니다.
/etc/resolv.conf
또는
/proc/meminfo
/proc/cpuinfo
텍스트 파일을 다루기 위해 새로운 형식과 함수, 프로시저를 사용했는데, 그것은
1.
F: TextFile;
TextFile은 텍스트 파일 변수를 선언하기 위해 사용하는 형식입니다. 이 변수는 다음의 사용을 위해 텍스트 파일에 연결할 수 있습니다.
2.
if FileExists(FileName) then
FileExists는 SysUtils유닛에 들어있는 함수입니다. 파일의 존재를 확인합니다. 저장 매체에 파일이 존재하는 경우 True를 되돌립니다.
3.
AssignFile(F, FileName);
파일의 존재를 확인한 다음에는, 파일 변수(F)에 실제 파일을 연결하기 위해 AssignFile 프로시저를 사용할 수 있습니다. F 변수의 어떤 그 이상의 사용방법은 실제 파일에 따라 달려있습니다.
4.
Reset(F); // Put file mode for read, file should exist
Reset 프로시저는 텍스트 파일을 읽기 전용으로 읽어들이고 파일의 첫번째 문자에 읽기 포인터를 위치합니다.BR 만약 현재 사용자에게 파일의 읽기 권한이 없다면, 접근 거부와 같은 오류 메시지가 나타날 것입니다.
5.
Readln(F, Line); // Read a line from text file
Readln 프로시저는 파일로부터 완전한 줄을 읽어들여 변수 Line에 넣기위해 사용합니다. 텍스트 파일로부터 줄을 읽기 전에 파일의 끝에 도달했는지 확인할 것입니다. 우리는 다음 함수 Eof를 통해 이를 해결할 수 있습니다.
6.
while not Eof(F) do
Eof 함수는 파일의 끝에 도달했을 경우 True를 되돌립니다. Read 처리를 더 이상 사용할 수 없고 파일의 내용을 다 읽었다는 상태를 나타낼 때 사용합니다.
7.
CloseFile(F); // Release F and FileName connection
파일로부터 읽어오는 동작이나 파일에 기록하는 동작이 끝나면, 파일을 놓아주기 위해 닫아야 하는데, Reset 프로시저가 운영체제로부터 파일을 예약하고 있고, 파일이 열려있는 동안 다른 프로그램이 기록하거나 지우는 것을 막고 있기 때문입니다.
파일을 여는 중에 Reset 프로시저의 동작을 성공적으로 수행했을 때, CloseFile을 사용할 것입니다. 만약 Reset이 실패(예를 들어, 파일이 존재하지 않거나 다른 프로그램이 파일을 사용하고 있다면)하면 이런 경우 파일을 닫지 않습니다.
다음 예제에서는 새로운 텍스트 파일을 만들고 임의의 텍스트를 넣어보겠습니다.