Program 12.2. #include<iostream> #include<fstream> usingnamespacestd; voidlog_message(conststring&msg) { ofstreamout_file("data.log", if(out_file.bad()) out_file<<msg<<endl; return; }
12.6. Routin-routin Konversi File
Untuk menulis angka pada printer atau sebuah terminal, programer harus mengkonversi angka ke karakter. Sebuah printer hanya bisa mengerti karakter bukan angka. Sebagai contoh 567 harus dikonversi menjadi tig karake yaitu: “5”, ”6”, dan “7” dan kemudian dicetak. Operator << digunakan untuk mengkonversi data menuju karakter dan meletakanya dalam sebuah file. Fungsi ini adalah sangat flexibel. Hal tersebut mengubah integer sederhana menjadi variabel tetap atau yang sesuai dengan stering dalam bentuk bilangan hexadesimal, oktal atau desimal dengan penulisan rata pada margin kiri atau kanan. Jika selama menulis program tidak melakukan pengaturan apapun maka hasil konversi dalam kondisi default. Keanggotan fungsi setf dan unsetf digunakan untuk mengatur kondisi flag menjadi berlogika set “1" atau clear “0” dimana hal ini digunakan kendali proses konversi. Secara umum bentu penulisan fungsi adalah sebagai berikut:
file_var.setf(flags);//Setflags file_var.unsetf(flags);//Clearflags
Tabel dibawah ini merupakan daftar flag dan penjelasnya.
Tabel 12.3. I/O konversi flag
FLAG ARTI ios::skipwsloncatikarakteryangmendahuluispasisebagaimasukan. ios::leftOutputsebelahkiridibenarkan. ios::rightOutputseblahkanandibenarkan. ios::internalNumerikkeluaranadalahmemasukkanpaddedolehkarakter yangmengisiantaratandaataudasarkarakterdanjumlahitu sendiri.
ios::boolalphaGunakanversikarakteryangbenardansalahuntukinputdan output. ios::decOutputdalamdasarangka10,formatdesimal. ios::octKeluaranangkadenganformat8angkaoktal. ios::hexOutputdalamformatangka16,heksadesimal. ios::showbaseMencetak indikator inti pada setiap awal nomor. Misalnya, angkaheksadesimalyangdiawalidengan"0x". ios::showpointMenunjukkan titik desimal untuk semua angka floating‐point apakahiadibutuhkan. ios::uppercaseKetika konversi heksadesimal angka, menunjukkan angka AF sebagaihurufbesar. ios::showposMenempatkantandapositifsebelumsemuanomor. ios::scientificMengkonversisemuaangkafloating‐pointuntuknotasiilmiah padaoutput. ios::fixedMengkonversisemuafloating‐pointnomorketitiktetappada output. ios::unitbufBufferoutput.
Jika pada saat mnulis program menginginkan keluaran berupa format bilangan hexadesimal, maka yang harus dikerjakan adalah menambah dengan menulis potongan program dibawah ini:
number=0x3FF; cout<<"Dec:"<<number<<'\n'; cout.setf(ios::hex); cout<<"Hex:"<<number<<'\n'; cout.setf(ios::dec);
ketika di”run”, maka pprogram akan menghasilkan keluaran sebagai berikut: Dec:1023 Hex:3ff Ketika konversi angka ke karakter dilakukan, maka fungsi keanggotaannya ditulis: intfile_var.width(intsize); suatu saat output harus ditentukan sesuai dengan jumlah karakter yang digunakan. Sebagai contoh misalnya sejumlah 3 angka, secara umum dikonversi menjadi karakter string “3”. Jika diatur sampai empat, maka hasilnya menjadi dimana menunjukan satu ruang karakter. Perhatikan fungsi dibawah ini: intfile_var.precision(intdigits);
pernyataan program diatas digunakan untuk mengatur berapa banyak angkat yang akan dimunculkan setelah tanda koma (,). Dan kemudian menuliskan fungsi seperti dibawah ini:
charfile_var.fill(charpad);
Next read halaman 7.