2008 | Direktorat Pembinaan SMK
405
kemudian yang dibutuhkan adalah C++ mengambil file pada hardisk
yang digunakan. Hal ini dikerjakan melalui dengan membuka fungsi
keanggotaan sebagai berikut: data_file.openangka.dat;
sekarang programmer dpat membaca file mengunakan statement yang
sama untuk membaca yaitu dengan cin. Perhatikan program dibawah ini:
for
i = 0; i 100; ++i { asserti = 0;
asserti sizeofdata_array sizeofdata_array[0];
data_file data_array[i]; }
Terakhir yang dibutuhkan untuk mengetahui bahwa sistem IO telah
mengerjakannya dan kemudian menuliskan sebagai berikut:
data_file.close
; instruksi tersebut menutup program
yang kemudian dapat menggunakan program lagi. C++ memperbolehkan
membuka panggilan yang bervariasi denga construktor, sebagai contoh
mengganti pada penulisan ifstream
data_file; File dibaca dari
data_file.openangka.dat; dapat ditulis dengan
ifstream data_fileangka.dat;
apalagi sebuah destruktor dengan otomatis memanggil close. Pada
kasus tertentu jika sebuah file number.dat hilang, bagaimana dan
dimana programer akan memberitahukan permasalahan
tersebut?. Maka keanggotaan fungsi akan kembali dengan pesan
kesalahan jika pada fungsi tersebut terdapat masalah, atau kesalahan
yang mungkin terjadi. Sehigga untuk menguji apakah terdapat kesalahan
atau tidak programer perlu menuliskan potongan program
dibawah ini: if
data_file.bad { cerr
Unable to
open numbers.dat\n;
exit 8; }
Program tersebut dibawah ini merupakan program pembacaan
angka
Program 12.1 includeconio.h
include iostream
include fstream
include cstdlib
using namespace std;
int
main
406
Direktorat Pembinaan SMK | 2008
{
const int DATA_SIZE =
100 ;
Jumlah item dalam data
int data_array[DATA_SIZE]; ukuran data
ifstream data_file angkan.dat
; file masukan
int i;
penghitung Loop
if data_file.bad { cerr
Error: tidak dapat membuka file angka.dat\n
; exit
8 ;
} for i =
; i DATA_SIZE; ++i {
asserti = ;
asserti sizeofdata_arraysizeofdata_array[
]; data_file data_array[i];
} int total;
Total angka total =
;
for i =
; i DATA_SIZE; ++i {
asserti = ;
asserti sizeofdata_arraysizeofdata_array[
]; total += data_array[i];
} cout
Total dari semua angka adalah:
total \n; getch;
return
; }
Jika programmer ingin membaca baris dari data, maka harus
menggunakan fungsi getline. Dimana hal tersebut didefinisikan pada
potongan program dibawah ini: istream getline istream input_file,
string the_string; istream getline istream input_file,
string the_string, char delim
fungsi tersebut membaca baris yag disimpannya dalam string. Sebuah
fungsi referensi kembali menuju input stream. Bentuk kedua dari fungsi ini
memperbolehkan programmer menuju baris khusus atau batas
2008 | Direktorat Pembinaan SMK
407
akhir. Jika tidak dikehendaki maka programer bisa menggunakan
pengaturan default untuk menuju baris baru ‘\n’
12.5. Pembacaan String
Untuk membaca gaya bahasa string pada C, dapat menggunakan
fungsi getline. Fungsi ini dapat didefinisikan sebagai berikut:
istream
getlinechar buffer, int len, char
delim = \n dimana parameter-parameter pada
fungsi ini antara lain: 1. Buffer, gaya bahasa string,
dimana string disimpan setelah dilakukan pembacaan
2. Len, panjang buffer yang digunakan dalam byte. Fungsi ini
akan membaca sampai len-1 byte data menuju buffer.
Parameter ini biasanya disebut dengan sizeofbuffer
3. Delim, yaitu karakter yang digunakan.
Fungsi ini akan mengembalikan referensi menjadi file masukan.
Kemudian fungsi ini akan membaca terus-menerus sampai ditemukan
tanda karakter akhir baris ‘\n’. karakter tanda akhir baris ini tidak
disimpan dalam buffer, yang disimpan sebagai akhir string adalah
jika ditemukan tanda bahwa string telah berakhir ‘\0’. Perhatikan
contoh dibawah ini: char
buffer[30]; cin.getlinebuffer,
sizeofbuffer; Fungsi untuk file keluaran adalah
sama dengan file masukan, sebagai contoh pada deklarasi dibawah ini:
ofstream out_fileout.dat;
deklarasi diatas merupakan membuatmenulis file dengan nama
out.dat dan dalam penulisan nama juga diperbolehkan mnulis dengan
nama seperti out_file. Pada kenyataanya, construktor dapat
mengambil dua argumen tambahan. Definisi penuh dari file keluaran
construktor adalah: ofstream::ofstreamconst
char name, int
mode= ios::out, int prot = filebuf::openprot;
dimana parameter-parameter pada fungsi ini adalah:
Name, nama dari nama file yang
ditulis Mode, merupakan sekumpulan
flagtanda O merah bersama- sama bahwa hal tersebut
merupakan mode open. Flag
ios::out dibutuhkan sebagai file keluaran. Flag-flag lain yang
dibutuhkan seperti dalam tabel dibawah ini:
408
Direktorat Pembinaan SMK | 2008
Tabel 12.2.Open Flag
FLAG ARTI
ios::app menambahkan
data ke akhir output file. ios::ate
Pergi ke akhir file ketika dibuka.
ios::in Membuka
untuk masukan harus diberikan kepada fungsi buka ifstream
variabel. ios::out
Buka file untuk output harus diberikan kepada fungsi anggota
buka ofstream variabel.
ios::binary File
binary jika tidak ada, maka file dibuka sebagai file ASCII. ios::trunc
Membuang isi yang ada saat membuka file untuk menulis.
ios::nocreate Mengalami
gagal jika file tersebut tidak ada. Output file saja. Membuka
sebuah file input selalu gagal jika tidak ada file.. ios::noreplace
Jangan menimpa file yang ada. Jika file ada, menyebabkan
rusak ketika buka.
Prot, file protection dimana hal ini tergantung pada sistem operasi
yang digunakan untuk menentukan mode proteksi file
tersebut. Misalnya pada UNIX proteksi default sampai 0644
untuk bacatulis sendiri, baca pada group maupun penulisan lainnya,
sedangkan MS-DOSwindows defaultnya adalah 0 dalam kondisi
file normal.
Perhatikan contoh pernyataan dibawah ini:
ofstream out_file data.new
, ios::out| ios::binary| ios::nocreate|
ios::app; potongan pogram diatas dapat
diartikan digunakan menambahkan ios::app data biner menggunakan
ios::binary, kalau file sudah ada atau telah ditemukan filenya
ios::nocreate sedangkan data.new merupakan nama file yang akan
ditulis. Pada contoh dibawah terdiri dari
fungsi pendek tersebut digunakan untuk menulis pesan pada sebuah
file catatan. Sesuatu yang pertama yang dilakukan adalah membuka
fungsi untuk operasi output ios::out, menambahkan catatan ios::app,
dengan menulis dari permulaan sampai akhir penulisan ios::ate.
Setelah fungsi tersebut menulis pesan serta terahir menutup file.
Fungsi ini telah dirancang dengan sederhana, dimana hal
tersebut juga tidak memperdulikan mengenai efisiensi dan sebagai hasil
dari fungsi adalah sangat tidak efisien. Masalah tersebut dibuka dan
ditutup setiap saat memanggil log_message. Membuka file
merupakan sebuah operasi yang cukup mahal, dan sesuatu juga harus
mempunyai kecepatan lebih tinggi, jika akan membuka file hanya sekali
dan mengingatkan tersebut.