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: #include
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 #include #include #include 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(); getch(); } 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 #include #include #include 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(); getch(); } 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 #include #include <stdio.h> #include 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< #include #include 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(); getch(); }
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 #include #include <stdlib.h> // exit #include 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<
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 #include #include <stdlib.h> #include #include 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<<"-----------------------------------------------------------"<<endl; cout<<setiosflags(ios::left)<<setw(5) << "No." <<setw(10)<<"NPM" <<setw(20)<<"Nama Mahasiswa" <<setw(7) <<"IPK"<<setw(20)<<"Prediket"<<endl; cout<<"-----------------------------------------------------------"<<endl; while (inMhsFile>>npm>>nama>>ipk) { no++; infoMhs (no,npm,nama,ipk,pre); }
cout<<"-----------------------------------------------------------"<<endl; getch(); }
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)<
CARA 2 : A. Menulis/Merekam data #include #include #include <stdlib.h> #include #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 #include #include <stdlib.h> #include #include <stdio.h> #include <string.h> #include 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<<"-----------------------------------------------------------"<<endl; cout <<setiosflags(ios::left)<<setw(5)<<"No." <<setw(10)<<"NPM" <<setw(20)<<"Nama"<<setw(5) <<"IPK" <<setw(20)<<"Prediket"<<endl; cout<<"-----------------------------------------------------------"<<endl; file_mhs.read((char *)&mhs,sizeof(mhs)); while (!file_mhs.eof()) { infoMhs(); file_mhs.read((char*)&mhs, sizeof(mhs)); } cout<<"-----------------------------------------------------------"<<endl; file_mhs.close(); getch(); } 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 #include // cin, cout #include // file #include <stdlib.h> // exit #include // 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 #include #include // file #include <stdlib.h> // exit #include #include <string.h> // strcpy #include // 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<<"-----------------------------------------------------------"<<endl; cout <<setiosflags(ios::left)<<setw(5)<<"No." <<setw(10)<<"NPM" <<setw(20)<<"Nama"<<setw(5) <<"IPK" <<setw(20)<<"Prediket"<<endl; cout<<"-----------------------------------------------------------"<<endl; mhsFile.read((char *)&mhs,sizeof(mhs)); while (!mhsFile.eof()) { infoMhs(); mhsFile.read((char*)&mhs, sizeof(mhs)); } cout<<"-----------------------------------------------------------"<<endl; mhsFile.close(); getch(); } 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 :