PENGELOLAAN FILE Operasi File pada C++ Pada prinsipnya operasi yang dilakukan pada file terdiri dari 3 tahapan : 1. Membuka file 2. Melakukan pemrosesan pada file 3. Menutup file Dalam melakukan operasi file dibutuhkan fungsi-fungsi yang berhubungan dengan operasi file yang terdapat pada file fstream.h. Oleh sebab itu, untuk dapat melakukan operasi file, maka preprocessor directive berikut ditambahkan: MEMBUKA FILE Pembukaan dari suatu file mempunyai 2 tujuan, yaitu : 1. Membuka file untuk ditulis/direkam 2. Membuka file untuk dibaca Membuka file untuk ditulis : ofstream file_objek; Setelah objek_output diciptakan, maka file dibuka dengan cara : file_objek.open ( nama_file ); Kedua pernyataan di atas dapat disederhanakan : ofstream file_objek ( nama_file ); Membuka file untuk dibaca : ifstream file_objek; Setelah objek_input diciptakan, maka file dibuka dengan cara : file_objek.open ( nama_file ); Kedua pernyataan di atas dapat disederhanakan : ifstream file_objek ( nama_file ); MENUTUP FILE Setelah pemrosesan file berakhir, maka file perlu ditutup. Langkah ini dilakukan dengan cara : file_objek.close(); Pemakaian fungsi close() sifatnya optional. Bila digunakan fungsi ini maka compiler tidak akan mengeluarkan pesan error.
FILE TEKS Contoh : Buat program C++ untuk menulis kalimat Belajar File sebanyak 10 kali dan disimpan dengan nama file datateks.txt dan file objek latihan. Berdasarkan data yang tersimpan dalam datatext.txt tsb, tampilkan isi filenya melalui program input. PROGRAM C++ : A. MENULIS / MEREKAM DATA TEKS // Merekam atau menulis File Text void main() clrscr(); cout << Latihan Merekam data ke file\n ; ofstream latihan ( datateks.txt ); for (int i=1; i<=10; i++) latihan << Belajar File << endl; cout << Data telah selesai direkam. << endl; latihan.close(); Setelah program ini dijalankan, maka terbentuk file datateks.txt. File ini tersimpan dalam folder yang sama dengan program ditulis. Untuk melihat isi file datateks.txt dapat menggunakan Notepad:
B. MEMBACA ISI FILE // Membaca/Menampilkan data file text void main() const int MAX=80; char buffer[max+1]; clrscr(); cout << Latihan Menampilkan Isi file\n ; ifstream latihan ( datateks.txt ); while (latihan) latihan.getline(buffer,max); cout << buffer << endl; latihan.close(); Hasil Eksekusi program :
Latihan : 1. Rekam 5 data nama mahasiswa yang diinputkan dengan nama file objek mhs dan nama file teks nama_mhs.txt // Merekam atau menulis File Text #include <stdio.h> void main() clrscr(); char nama[30]; cout << Latihan Merekam data ke file\n ; ofstream mhs( nama_mhs.txt ); for (int i=1; i<=5; i++) cout<< nama mahasiswa = ; gets(nama); mhs<<nama << endl; cout << Data telah selesai direkam. << endl; mhs.close(); // Membaca/Menampilkan data file text void main() const int MAX=80; char buffer[max+1]; clrscr(); cout << Latihan Menampilkan Isi file\n ; ifstream mhs( nama_mhs.txt ); while (mhs) mhs.getline(buffer,max); cout << buffer << endl; mhs.close();
FILE DENGAN AKSES SECARA SEQUENTIAL ios::in sebagai input (membaca data yang direkam/ditulis) ios::out sebagai output (merekam/menulis data) ios::ate menuliskan pada akhir file untuk file baru. ios::app meletakkan keluaran atau output pada akhir file ios::trunk akan menghapus file jika ada ios::nocreate tanpa membuat file baru (file harus ada sebelumnya) ios::noreplace membuat file baru (file belum ada sebelumnya, jika ada maka fungsi tidak berjalan) ios::binary membuat file biner (bukan text) Contoh : Buatlah pemrograman C++ untuk menulis/merekam data mahasiswa yang terdiri dari npm, nama mahasiswa dan ipk. Data tsb disimpan dengan nama file objek mhsfile dan nama file data datamhs.dat. CARA 1 : A. Menulis / Merekam #include <stdlib.h> // exit main() ofstream mhsfile ("datamhs.dat", ios::app); if (!mhsfile) cerr<<"file could not be opened"<<endl; exit(1); cout<<"enter the npm, nama, dan ipk"<<endl; cout<<"enter EOF to end input."<<endl<<"?"; char npm[10]; char nama[20]; float ipk; while (cin>>npm>>nama>>ipk) mhsfile<<npm<<' '<<nama<<' '<<ipk<<endl; cout<<"?";
Kelemahan cara ini : nama mahasiswa tidak dapat diisikan lebih dari 1 suku kata karena untuk input datanya menggunakan statement cin. Setelah program ini dijalankan, maka terbentuk file datamhs.dat. File ini tersimpan dalam folder yang sama dengan program ditulis. Untuk melihat isi file datamhs.dat dapat menggunakan Notepad: B. Membaca Isi File #include <stdlib.h> #include <iomanip.h> void infomhs (int, char*, char*, float, char*); main() ifstream inmhsfile ("datamhs.dat", ios::in); if (!inmhsfile) cerr<<"file could not be opened"<<endl; exit(1); char npm[10]; char nama[20]; float ipk; int no=0; char pre[20]; cout<<setiosflags(ios::left)<<setw(5) << "No." <<setw(10)<<"npm" <<setw(20)<<"nama Mahasiswa" <<setw(7) <<"IPK"<<setw(20)<<"Prediket"<<endl; while (inmhsfile>>npm>>nama>>ipk) no++; infomhs (no,npm,nama,ipk,pre);
void infomhs (int no,char*npm, char*nama, float ipk,char* pre) if (ipk>=3.00) strcpy(pre,"sangat Memuaskan"); else if (ipk>=2.50) strcpy(pre,"memuaskan"); else if (ipk>=2.00) strcpy(pre,"cukup"); cout<<setiosflags(ios::left)<<setw(5)<<no <<setw(10)<<npm<<setw(20)<<nama<<setw(7) <<setprecision(3) <<ipk <<setiosflags(ios::showpoint ios::left) <<setw(20)<<pre<<endl; Hasil eksekusi program : CARA 2 : A. Menulis/Merekam data #include <stdlib.h> #include <stdio.h> #include <string.h> struct datamhs char npm[10]; char nama[20]; float ipk; mhs;
main() ofstream file_mhs ("datamhs.dat", ios::app); if (!file_mhs) cerr<<"file could not be opened"<<endl; exit(1); // prototype in stdlib.h char jwb='y'; cout<<"input Data Mahasiswa"<<endl; while (jwb=='y') cout << endl; cout << "NPM = "; gets(mhs.npm); cout << "Nama = "; gets(mhs.nama); cout << "IPK = "; cin>>mhs.ipk; file_mhs.write((char*)&mhs, sizeof(mhs)); cout << "Ada Data Lagi [Y/T] = "; cin >> jwb; file_mhs.close(); B. Membaca Isi File #include <stdlib.h> #include <stdio.h> #include <string.h> #include <iomanip.h> void infomhs(); struct datamhs char npm[10]; char nama[20]; float ipk; mhs; main() ifstream file_mhs ("datamhs.dat", ios::in); if (!file_mhs)
cerr<<"file could not be opened"<<endl; exit(1); cout <<setiosflags(ios::left)<<setw(5)<<"no." <<setw(10)<<"npm" <<setw(20)<<"nama"<<setw(5) <<"IPK" <<setw(20)<<"prediket"<<endl; file_mhs.read((char *)&mhs,sizeof(mhs)); while (!file_mhs.eof()) infomhs(); file_mhs.read((char*)&mhs, sizeof(mhs)); file_mhs.close(); int no=0; char pre[20]; void infomhs() no++; if (mhs.ipk>=3.00) strcpy(pre,"sangat Memuaskan"); else if (mhs.ipk>=2.50) strcpy(pre,"memuaskan"); else if (mhs.ipk>=2.00) strcpy(pre,"cukup"); cout <<setiosflags(ios::left)<<no<<". " <<setw(10)<<mhs.npm <<setw(20)<<mhs.nama <<setw(5) <<setprecision(3)<<setiosflags(ios::showpoint ios::right) <<setiosflags(ios::left)<<mhs.ipk<<setw(20)<<pre<<endl; Hasil eksekusi program :
Contoh : Buatlah pemrograman C++ untuk menulis/merekam data mahasiswa yang terdiri dari npm, nama mahasiswa dan ipk. Data tsb disimpan dengan nama file objek mhsfile dan nama file data datamhs.dat. A. Menulis/Merekam data // cin, cout // file #include <stdlib.h> // exit // clrscr, getch #include <stdio.h> // gets struct datamhs char npm[10]; char nama[20]; float ipk; mhs; main() ofstream mhsfile ("datamhs.dat", ios::app); if (!mhsfile) cerr<<"file could not be opened"<<endl; exit(1); // prototype in stdlib.h char jwb='y'; cout<<"input Data Mahasiswa"<<endl; while (jwb=='y') cout << endl; cout << "NPM = "; gets(mhs.npm); cout << "Nama = "; gets(mhs.nama); cout << "IPK = "; cin>>mhs.ipk; mhsfile.write((char*)&mhs, sizeof(mhs)); cout << "Ada Data Lagi [Y/T] = "; cin >> jwb;
mhsfile.close(); Membaca Isi File // file #include <stdlib.h> // exit #include <string.h> // strcpy #include <iomanip.h> // setiosflag, setw void infomhs(); // prototype fungsi struct datamhs char npm[10]; char nama[20]; float ipk; mhs; main() ifstream mhsfile ("datamhs.dat", ios::in); if (!mhsfile) cerr<<"file could not be opened"<<endl; exit(1); cout <<setiosflags(ios::left)<<setw(5)<<"no." <<setw(10)<<"npm" <<setw(20)<<"nama"<<setw(5) <<"IPK" <<setw(20)<<"prediket"<<endl; mhsfile.read((char *)&mhs,sizeof(mhs)); while (!mhsfile.eof()) infomhs(); mhsfile.read((char*)&mhs, sizeof(mhs)); mhsfile.close(); int no=0; char pre[20];
void infomhs() no++; if (mhs.ipk>=3.00) strcpy(pre,"sangat Memuaskan"); else if (mhs.ipk>=2.50) strcpy(pre,"memuaskan"); else if (mhs.ipk>=2.00) strcpy(pre,"cukup"); cout <<setiosflags(ios::left)<<no<<". " <<setw(10)<<mhs.npm <<setw(20)<<mhs.nama <<setw(5) <<setprecision(3)<<setiosflags(ios::showpoint ios::right) << mhs.ipk<< setiosflags(ios::left)<<setw(20)<<pre<<endl; Hasil eksekusi program :