File InputOutput C++ OPERASI FILE

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.