StartprogrammingusingObjectPascal:CreatingAndWritingIntoTextFile

From 흡혈양파의 번역工房
Jump to: navigation, 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.


이 예제에서는 많은 중요한 요소들을 사용했습니다.

  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
    
    이 프로시저는 텍스트 파일에 문자열이나 변수를 기록하고, 이들 데이터의 마지막에 ASCII CODE 13번과 10번으로 표현 하는 줄바꿈 문자인 캐리지 리턴/라인 피드의 조합(CR/LF)을 붙이기 위해 사용합니다.
    이 문자들은 콘솔 창에 표시되는건 아니지만, 화면에 나타나는 커서를 새로운 줄로 이동할 것입니다.
  5. Inc 프로시저:
    Inc(i);
    
    이 프로시저는 정수형 변수를 1만큼 증가합니다. 다음 구문과 같습니다.
    i := i + 1;
    
  6. CloseFile 프로시저:
            CloseFile(F); // Release F and FileName connection
    
    앞서 보신 바와 같이, CloseFile 프로시저는 운영체제로 파일을 돌려줍니다. 덧붙여서, 텍스트 파일에 기록할 때 기록버퍼를 비우는 추가적인 작업을 수행합니다.


텍스트 파일의 버퍼링은 텍스트 파일을 빠르게 다루게 해주는 기능입니다. 단일 줄이나 문자를 디스크나 다른 저장 매체에 바로 기록(메모리에 기록하는 것과 비교했을 때 매우 느립니다)하는 대신에, 프로그램은 이 항목들을 메모리 버퍼에 기록할 것입니다. 버퍼가 거의 가득 찼을 때, 하드 디스크와 같은 영구 저장 매체에 몰아 넣습니다(강제로 기록합니다). 이 동작은 기록을 빠르게 해주지만, 전원이 갑자기 나갔을 경우 (버퍼에 있는)데이터들을 잃을 수 있는 위험성을 더할 것입니다. 데이터 손실을 최소화하기 위해, 파일에 기록을 끝내고 나서 바로 파일을 닫아주거나 버퍼를 명시적으로 비우기 위해 Flush 프로시저를 호출할 것입니다.