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.