StartprogrammingusingObjectPascal:ReadingTextFileProgram

From 흡혈양파의 번역工房
Jump to: navigation, search

텍스트 파일 읽기 프로그램

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
    
    FileExistsSysUtils 유닛에 들어있는 함수입니다. 파일의 존재를 확인합니다. 저장 매체에 파일이 존재하는 경우 True 를 되돌립니다.
  3. AssignFile(F, FileName);
    
    파일의 존재를 확인한 다음에는, 파일 변수(F)에 실제 파일을 연결하기 위해 AssignFile 프로시저를 사용할 수 있습니다. F 변수에 대한 사용방법은 변수가 가리키는 실제 파일에 따라 다를 수 있습니다.
  4. Reset(F); // put file mode for read, file should exist
    
    Reset 프로시저는 텍스트 파일을 읽기 전용으로 읽어들이고 파일의 첫번째 문자에 읽기 포인터를 위치합니다. 만약 현재 사용자에게 파일의 읽기 권한이 없다면, 접근 거부(ACCESS DENIED)와 같은 오류 메시지가 나타날 것입니다.
  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 이 실패(예를 들어, 파일이 존재하지 않거나 다른 프로그램이 파일을 사용하고 있다면)하면 이런 경우 파일을 닫지 않습니다.


다음 예제에서는 새로운 텍스트 파일을 만들고 임의의 텍스트를 넣어보겠습니다.