ParamStr dan ParamCount

Kita sudah membuat program yang disa digunakan untuk bekerja dengan program-program lain menggunakan redireksi input dan output serta penggunaan pipe. Jika, kita kembali lagi pada perintah dir, kita melihat bahwa keluaran perintah ini bisa berubah sesuai dengan parameter yang diberikan. Kita juga bisa membuat program yang membaca parameter untuk membuat aksi yang berbeda tergantung pada parameter yang diberikan. Kali ini kita akan mencoba untuk mengubah program harilahir untuk menggunakan parameter program sehingga kita sekaligus memasukkan tanggal lahir sewaktu memanggil program seperti berikut:

C:\Source>haritanggal 17 8 1945

Program haritanggal membaca 17, 8, dan 1945 sebagai masukan bagi program.

Delphi memiliki cara untuk membaca parameter yang diberikan saat memanggil program menggunakan fungsi ParamStr dan ParamCount. Fungsi ParamCount akan memberikan jumlah parameter yang diberikan, sedangkan fungsi ParamStr membutuhkan sebuah parameter berupa nomor dari parameter program yang diminta. Sebagai contoh, ParamCount untuk pemanggilan program seperti diatas akan mengembalikan nilai 3, dan ParamStr(1) akan mengembalikan nilai ’17’, ParamStr(2) mengembalikan nilai ‘8’, dan ParamStr(3) akan mengembalikan nilai ‘1945’. Di sini saya menuliskan ’17’, ‘8’, dan ‘1945’ karena tipe data yang dikembalikan oleh fungsi ParamStr adalah string.

Listing lengkap dari program baru kita adalah sebagai berikut:

program HariTanggal;
{$APPTYPE CONSOLE}
uses
  SysUtils;
type
  TNamaBulan=(Januari=1, Pebruari, Maret, April,
              Mei, Juni, Juli, Agustus, September,
              Oktober, Nopember, Desember);
  TTanggal=record
    Tanggal:integer;
    Bulan:TNamaBulan;
    Tahun:integer;
  end;
const
  Hari:array[0..6]of string=
        ('Minggu','Senin','Selasa','Rabu',
         'Kamis','Jumat','Sabtu');
  NamaBulan:array[Januari..Desember]of string=
    (' Januari ',' Pebruari ',' Maret ',' April ',
     ' Mei ',' Juni ',' Juli ',' Agustus ',
     ' September ',' Oktober ',' Nopember ',
     ' Desember ');
  HariPertama=5;
  HariKabisat:array[Januari..Desember]of integer=
    (0,31,60,91,121,152,182,213,244,274,305,335);
  BukanKabisat:array[Januari..Desember]of integer=
    (0,31,59,90,120,151,181,212,243,273,304,334);
var
  TglCari:TTanggal;
  HariCari:integer;

  function AmbilTanggal:TTanggal;
  var tmp:integer;
  begin
    Result.Tanggal:=StrToInt(ParamStr(1));
    tmp:=StrToInt(ParamStr(2));
    Result.Bulan:=TNamaBulan(tmp);
    Result.Tahun:=StrToInt(ParamStr(3));
  end;

  function IsKabisat(Y:integer):boolean;
  begin
    result:=((Y mod 4=0)and(Y mod 100<>0))
            or(Y mod 400=0);
  end;

  function HariDalamTahun(Tgl:TTanggal):integer;
  begin
    if IsKabisat(Tgl.Tahun)then
      Result:=HariKabisat[Tgl.Bulan]else
      Result:=BukanKabisat[Tgl.Bulan];
    Result:=Result+Tgl.Tanggal;
  end;   

  function HitungHari:integer;
  var i:integer;
  begin
    //Hitung hari dalam tahun
    result:=0;
    for i:=0 to TglCari.Tahun-1 do
      if IsKabisat(i)then result:=result+366
         else result:=result+365;
    //tambahkan dengan sisa hari
    result:=result+HariDalamTahun(TglCari);
  end;

  procedure DisplayHari;
  begin
    Writeln('Hari pada tanggal ',TglCari.Tanggal,
      NamaBulan[TglCari.Bulan],TglCari.Tahun,
      ' adalah hari ',Hari[HariCari]);
  end;

begin
  if ParamCount<3 then
  begin
    Writeln('HariTanggal tanggal bulan tahun');
    Writeln('Semua parameter dalam angka');
    Writeln('Tekan Enter');
    Readln;
    Halt(1);
  end;
  TglCari:=AmbilTanggal;
  HariCari:=(HariPertama+HitungHari) mod 7;
  DisplayHari;
  Writeln('Tekan Enter');
  Readln;
end.

Di awal program, kita harus memastikan bahwa jumlah parameter yang diberikan mencukupi, yaitu 3. Oleh karena itu jika jumlah parameternya kurang dari 3, kita memberi petunjuk cara pemakaian dan segera menghentikan program. Fungsi yang digunakan untuk menghentikan program adalah Halt dengan parameter berupa nilai yang dalam Command Prompt akan terbaca sebagai ErrorLevel. Bacalah buku DOS untuk mengetahui apa itu ErrorLevel.

Fungsi AmbilTanggal membaca parameter program dengan ParamStr. Akan tetapi nilai yang dikembalikan oleh fungsi ParamStr adalah string, sedangkan yang kita butuhkan adalah integer. Delphi menyediakan fungsi untuk mengubah string menjadi integer dengan fungsi StrToInt. Fungsi ini terdapat pada unit SysUtils. Oleh karena itu kita menyertakan unit SysUtils pada bagian uses. Fungsi kebalikan dari StrToInt adalah IntToStr yang akan membuat string yang akan menunjukkan angka yang senilai dengan isi dari variabel bertipe integer.

Jika program dijalankan, tampilannya akan seperti berikut:

C:\Source>haritanggal
HariTanggal tanggal bulan tahun
Semua parameter dalam angka
Tekan Enter


C:\Source>echo %ErrorLevel%
1

C:\Source>haritanggal 17 8 1945
Hari pada tanggal 17 Agustus 1945 adalah hari Jumat
Tekan Enter


C:\Source>

Pada contoh pertama, kita menjalankan program hanya dengan mengetikkan nama program, oleh karena itu yang dijalankan adalah menampilkan pesan dan menghentikan program dengan nilai ErrorLevel 1. Karena itu ketika kita menampilkan isi dari variabel ErrorLevel di command prompt, kita mendapatkan angka 1.

Dengan menjalankan program diikuti tanggal, bulan, dan tahun yang semuanya dalam angka, maka proses perhitungan dan penampilan hasil akan dijalankan.

Apakah Anda menyukai post ini? Mengapa tidak memberikan komentar di bawah dan melanjutkan perbincangan, atau berlangganan my feed dan dapatkan artikel semacam ini yang dikirm secara otomatis feed reader Anda.
Harap diperhatikan bahwa komentar atau pertanyaan yang disampaikan haruslah sesuai dengan topik yang sedang dibahas. Komentar atau pertanyaan yang tidak sesuai dengan topik akan kami hapus :!:

Tinggalkan komentar

Sebelum membuat komentar, pastikan Anda telah membaca komentar-komentar sebelumnya. Jangan membuat pertanyaan yang telah ditanyakan. Perhatikan pula link-link dalam artikel. Lihatlah link tersebut sebelum membuat pertanyaan, karena mungkin penjelasan dari pertanyaan Anda telah di jawab dalam link tersebut.

Komentar yang tidak mengikuti aturan ini akan dihapus!

(wajib)

(wajib)


Time limit is exhausted. Please reload the CAPTCHA.