user3602513
user3602513

Reputation: 23

External File Writing Not Completed

When I write to an external file in Pascal the external file is not written completely even though the coding was flawless.

procedure save;
  {Menyimpan data penerbangan ke dalam file eksternal}
      begin
         write('> ');
     write('nama file: ');
     readln(namafisik);
     assign(d,namafisik);
     {$I-};
     rewrite(d);
     {$I+};
     if (IOresult=0) then
         begin
            for i:=1 to Neff do
             writejadwal(i);
         end;
      end;

procedure writejadwal(i:integer);
{Menuliskan jadwal ke file eksternal pada indeks ke-i}
      begin
           write(d,T.KodePenerbangan[i]);
           write(d,' | ');
           write(d,T.KotaKeberangkatan[i]);
           write(d,' | ');
           write(d,T.KotaKedatangan[i]);
           write(d,' | ');
           if ((T.TKeberangkatan[i].Day) < 10 ) then
              begin
                   x:=T.TKeberangkatan[i].Day;
                   str(x,y);
                   s:=y;
                   write(d,'0'+s);
              end
           else
               begin
               write(d,T.TKeberangkatan[i].Day);
               end;
           write(d,':');
           if ((T.TKeberangkatan[i].Month) < 10 ) then
              begin
                   x:=T.TKeberangkatan[i].Month;
                   str(x,y);
                   write(d,'0'+y);
              end
           else
               begin
                    write(d,T.TKeberangkatan[i].Month);
               end;
           write(d,':');
           write(d,T.TKeberangkatan[i].Year);
           write(d,' | ');
           if ((T.TKeberangkatan[i].Hour) < 10 ) then
              begin
                   x:=T.TKeberangkatan[i].Hour;
                   str(x,y);
                   write(d,'0'+y);
              end
           else
               begin
                    write(d,T.TKeberangkatan[i].Hour);
               end;
           write(d,':');
           if ((T.TKeberangkatan[i].Minute) < 10 ) then
              begin
                   x:=T.TKeberangkatan[i].Minute;
                   str(x,y);
                   write(d,'0'+y);
              end
           else
               begin
                    write(d,T.TKeberangkatan[i].Minute);
               end;
           write(d,' | ');
           if ((T.TKedatangan[i].Day) < 10 ) then
              begin
                   x:=T.TKedatangan[i].Day;
                   str(x,y);
                   s:=y;
                   write(d,'0'+s);
              end
           else
               begin
               write(d,T.TKedatangan[i].Day);
               end;
           write(d,':');
           if ((T.TKedatangan[i].Month) < 10 ) then
              begin
                   x:=T.TKedatangan[i].Month;
                   str(x,y);
                   s:=y;
                   write(d,'0'+s);
              end
           else
               begin
               write(d,T.TKedatangan[i].Month);
               end;
           write(d,':');
           write(d,T.TKedatangan[i].Year);
           write(d,' | ');
           if ((T.TKedatangan[i].Hour) < 10 ) then
              begin
                   x:=T.TKedatangan[i].Hour;
                   str(x,y);
                   write(d,'0'+y);
              end
           else
               begin
                    write(d,T.TKedatangan[i].Hour);
               end;
           write(d,':');
           if ((T.TKedatangan[i].Minute) < 10 ) then
              begin
                   x:=T.TKedatangan[i].Minute;
                   str(x,y);
                   write(d,'0'+y);
              end
           else
               begin
                    write(d,T.TKedatangan[i].Minute);
               end;
           write(d,' | ');

           if (T.TKedatanganImplementasi[i].Day=0) then
              writeln(d,'__:__:____ | __:__ | __:__:____ | __:__')
           else
           {MULAI}
           begin
           if ((T.TKeberangkatanImplementasi[i].Day) < 10 ) then
              begin
                   x:=T.TKeberangkatanImplementasi[i].Day;
                   str(x,y);
                   s:=y;
                   write(d,'0'+s);
              end
           else
               begin
               write(d,T.TKeberangkatanImplementasi[i].Day);
               end;
           write(d,':');
           if ((T.TKeberangkatanImplementasi[i].Month) < 10 ) then
              begin
                   x:=T.TKeberangkatanImplementasi[i].Month;
                   str(x,y);
                   write(d,'0'+y);
              end
           else
               begin
                    write(d,T.TKeberangkatanImplementasi[i].Month);
               end;
           write(d,':');
           write(d,T.TKeberangkatanImplementasi[i].Year);
           write(d,' | ');
           if ((T.TKeberangkatanImplementasi[i].Hour) < 10 ) then
              begin
                   x:=T.TKeberangkatanImplementasi[i].Hour;
                   str(x,y);
                   write(d,'0'+y);
              end
           else
               begin
                    write(d,T.TKeberangkatanImplementasi[i].Hour);
               end;
           write(d,':');
           if ((T.TKeberangkatanImplementasi[i].Minute) < 10 ) then
              begin
                   x:=T.TKeberangkatanImplementasi[i].Minute;
                   str(x,y);
                   write(d,'0'+y);
              end
           else
               begin
                    write(d,T.TKeberangkatanImplementasi[i].Minute);
               end;
           write(d,' | ');
           if ((T.TKedatanganImplementasi[i].Day) < 10 ) then
              begin
                   x:=T.TKedatanganImplementasi[i].Day;
                   str(x,y);
                   s:=y;
                   write(d,'0'+s);
              end
           else
               begin
               write(d,T.TKedatanganImplementasi[i].Day);
               end;
           write(d,':');
           if ((T.TKedatanganImplementasi[i].Month) < 10 ) then
              begin
                   x:=T.TKedatanganImplementasi[i].Month;
                   str(x,y);
                   s:=y;
                   write(d,'0'+s);
              end
           else
               begin
               write(d,T.TKedatanganImplementasi[i].Month);
               end;
           write(d,':');
           write(d,T.TKedatanganImplementasi[i].Year);
           write(d,' | ');
           if ((T.TKedatanganImplementasi[i].Hour) < 10 ) then
              begin
                   x:=T.TKedatanganImplementasi[i].Hour;
                   str(x,y);
                   write(d,'0'+y);
              end
           else
               begin
                    write(d,T.TKedatanganImplementasi[i].Hour);
               end;
           write(d,':');
           if ((T.TKedatanganImplementasi[i].Minute) < 10 ) then
              begin
                   x:=T.TKedatanganImplementasi[i].Minute;
                   str(x,y);
                   write(d,'0'+y);
              end
           else
               begin
                    write(d,T.TKedatanganImplementasi[i].Minute);
               end;
           writeln(d);
           end;
           {SELESAI}
      end;

By the way jadwal is Indonesian for English

Upvotes: 1

Views: 88

Answers (2)

Marco van de Voort
Marco van de Voort

Reputation: 26356

The problem is that you don't close or flush. Most languages try to minimize calling the OS for write, and do that by writing only if enough bytes have been accumulated. (128 bytes standard, but this can be increased with settextbuf). Probably your file is a multiple of 128bytes.

flushing or closing writes out the remains of the buffer.

Upvotes: 2

The coding wasn't quite flawless. In particular, you don't seem to be closing the file.

Upvotes: 5

Related Questions