<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=StartprogrammingusingObjectPascal%3AAppendingStudentMarksProgram</id>
	<title>StartprogrammingusingObjectPascal:AppendingStudentMarksProgram - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=StartprogrammingusingObjectPascal%3AAppendingStudentMarksProgram"/>
	<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=StartprogrammingusingObjectPascal:AppendingStudentMarksProgram&amp;action=history"/>
	<updated>2026-05-01T11:41:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://trans.onionmixer.net/wiki/index.php?title=StartprogrammingusingObjectPascal:AppendingStudentMarksProgram&amp;diff=248&amp;oldid=prev</id>
		<title>Onionmixer: SPOP 학생성적추가프로그램 페이지 추가</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=StartprogrammingusingObjectPascal:AppendingStudentMarksProgram&amp;diff=248&amp;oldid=prev"/>
		<updated>2012-07-26T09:50:17Z</updated>

		<summary type="html">&lt;p&gt;SPOP 학생성적추가프로그램 페이지 추가&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;===학생 성적 추가 프로그램===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
Program AppendMarks;&lt;br /&gt;
&lt;br /&gt;
{$mode objfpc}{$H+}&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
    {$IFDEF UNIX}{$IFDEF UseCThreads}&lt;br /&gt;
    cthreads,&lt;br /&gt;
    {$ENDIF}{$ENDIF}&lt;br /&gt;
    Classes, SysUtils&lt;br /&gt;
    { you can add units after this };&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
    F: file of Byte;&lt;br /&gt;
    Mark: Byte;&lt;br /&gt;
begin&lt;br /&gt;
    AssignFile(F, &amp;#039;marks.dat&amp;#039;);&lt;br /&gt;
    if FileExists(&amp;#039;marks.dat&amp;#039;) then&lt;br /&gt;
    begin&lt;br /&gt;
        FileMode:= 2; // Open file for read/write&lt;br /&gt;
        Reset(F); // open file&lt;br /&gt;
        Seek(F, FileSize(F)); // Go to beyond last record&lt;br /&gt;
        Writeln(&amp;#039;Please input students marks, write 0 to exit&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        repeat&lt;br /&gt;
            Write(&amp;#039;Input a mark: &amp;#039;);&lt;br /&gt;
            Readln(Mark);&lt;br /&gt;
            if Mark &amp;lt;&amp;gt; 0 then // Don&amp;#039;t write 0 value in disk&lt;br /&gt;
                Write(F, Mark);&lt;br /&gt;
        until Mark = 0;&lt;br /&gt;
        CloseFile(F);&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
        Writeln(&amp;#039;File marks.dat not found&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
    Write(&amp;#039;Press enter key to close..&amp;#039;);&lt;br /&gt;
    Readln;&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 프로그램을 실행하고 새 레코드를 입력하고 나서 덧붙인 데이터를 보기 위해 다시 실행할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
참고로 파일에 기록을 목적으로 파일을 열기 위해 &amp;#039;&amp;#039;Rewrite&amp;#039;&amp;#039; 프로시저 대신 &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Reset&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; 프로시저를 사용하였습니다. &amp;#039;&amp;#039;Rewrite&amp;#039;&amp;#039;는 기존의 파일의 모든 데이터를 지우고, 파일이 존재하지 않는다면 빈 파일을 만들지만, &amp;#039;&amp;#039;Reset&amp;#039;&amp;#039;은 내용을 지우지 않고 기존의 파일을 열기만 할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
또한 읽기/쓰기 접근 모드를 위해 파일을 열 필요가 있다는 것을 나타내기 위해 FileMode 변수에 2를 할당했습니다. FileMode의 0은 읽기 전용, 1은 쓰기 전용, 2(기본)는 읽기/쓰기를 의미합니다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
        FileMode:= 2; // Open file for read/write&lt;br /&gt;
        Reset(F); // open file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Reset&amp;#039;&amp;#039;은 첫번째 레코드에 읽기/쓰기 포인터를 놓고, 이러한 이유로 파일에 바로 기록을 시작하면 이전 레코드에 덮어쓰게 되기 때문에, 파일의 끝으로 읽기/쓰기 포인터를 이동하기 위해 &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Seek&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; 프로시저를 사용했습니다.  &amp;#039;&amp;#039;Seek&amp;#039;&amp;#039;는 임의 접근 파일에서만 사용할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Seek&amp;#039;&amp;#039; 프로시저로 존재하지 않는 레코드 위치에 접근하려 한다면 (예를 들어, 50 레코드만 있는데 100번째 레코드에 접근하려 한다면), 오류를 만나게 될 것입니다.&lt;br /&gt;
&lt;br /&gt;
파일의 현재 레코드 갯수를 되돌리는 &amp;#039;&amp;#039;FileSize&amp;#039;&amp;#039; 함수도 사용했습니다.  파일의 끝으로 건너뛰기 위해 &amp;#039;&amp;#039;Seek&amp;#039;&amp;#039; 프로시저와 함께 사용했습니다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
Seek(F, FileSize(F)); // Go to beyond last record&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
참고로 이 예제는 기존의 학생 성적 파일이 있을 경우에 사용할 수 있습니다. 만약 그렇지 않다면, 새 파일을 만들 수 있도록 Rewrite를 사용하는 처음 프로그램(학생 성적 저장하기)을 실행하는 것이 좋습니다.&lt;br /&gt;
&lt;br /&gt;
다음 예제를 통해 우리가 해낸 바와 같이, 파일의 존재 유무에 따라 두 가지 방식(&amp;#039;&amp;#039;Reset&amp;#039;&amp;#039;과 &amp;#039;&amp;#039;Rewrite&amp;#039;&amp;#039;)을 혼용할 수 있습니다.&lt;br /&gt;
[[Category:StartprogrammingusingObjectPascal]]&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
</feed>