Operasi File

Posted by belajar

Struktur File
Kebanyakan program melibatkan media disk sebagai tempat untuk membaca atau merekam data. Data sendiri disimpan dalam disk dalam bentuk suatu kesatuan yang disebut file. Suatu file merupakan organisasi dari sejumlah record. Masing-masing record dapat terdiri atas satu atau beberapa field dan setiap field terdiri atas satu atau beberapa byte. Adapun byte merupakan susunan dari 8 bit.

Tahapan Operasi File
Operasi pada file pada dasarnya meliputi tiga tahapan, yaitu :
1.    Membukaimengaktifkan file
2.    Melaksanakan proses file
3.    Menutup file

Membuka / Mengaktifkan File
Sebelum file dapat diakses (dibaca atau ditulisi), mula-mula file haruslah diaktifkan terlebih dahulu. Untuk keperluan ini fungsi yang digunakan yaitu fopen0. Bentuk deklarasinya adalah sebagai berikut :

FILE *fopen (char *namafile, char *mode);



dengan :
namafile berupa nama dari file yang akan diaktifkan
mode berupa jenis operasi yang akan dilakukan terhadap file
prototipe ada pada file stdio.h
Jenis operasi file dapat berupa salah satu di antara mode berikut :
  • r menyatakan file hanya akan dibaca. Dalam hal ini, file yang akan diproses haruslah sudah ada dalam disk pada current directory.
  • w menyatakan bahwa file baru diciptakan. Selanjutnya operasi yang akan dilakukan terhadap file adalah operasi perekaman data. Seandainya file tersebut sudah ada dalam disk, isinya yang lama akan terhapus.
  • a untuk membuka file yang sudah ada dalam disk, dan operasi yang akan dilakukan adalah penambahan data pada file. Data baru akan ditempatkan di bagian belakang dari file. Seandainya file belum ada, secara otomatis file akan diciptakan terlebih dahulu.
  • r+ untuk membuka file yang sudah ada, dan operasi yang akan dilakukan berupa pembacaan serta penulisan.
  • w+ untuk membuka file dengan tujuan untuk pembacaan atau penulisan. Jika file sudah ada, isinya akan dihapus.
  • a+ untuk membuka file, dengan operasi yang dapat dilakukan berupa perekaman maupun pembacaan. Jika file sudah ada, isinya tak akan dihapus.
Keluaran fungsi fopen() berupa pointer yang menunjuk ke tipe FILE (pointer to FILE), yaitu tipe struktur yang definisinya ada pada stdio.h (oleh karena itu program yang menggunakanfopen() harus melibatkan file stdio.h).
Berhasil tidaknya operasi pengaktifan file dapat dilihat pada keluaran fungsi fopen(). Jika keluaran fungsi berupa NULL (suatu makro yang didefinisikan pada file stdio.h), berarti operasi pengaktifan file gagal. Kejadian seperti ini bisa terjadi misalnya saat membuka file dengan mode "r" ternyata file yang dibuka tidak ada dalam disk.
Contoh pemakaian fungsifopen() :

pf = fopen ("COBA. TXT", "w") ;

dengan variabel pf dideklarasikan sebagai berikut :
FILE *pf;
Maksud dari pernyataan pf = fopen ("CO BA. TXT", "w") ; adalah

menciptakan dan mengaktifkan file bernama "COBA.TXT"
dengan mode yaitu "w" (mode penulisan ke file)
dan menempatkan pointer-ke-FILE ke variabel pointer pf
Dengan instruksi di atas, seandainya file "COBA.TXT" sudah ada dalam disk, maka isi file tersebut akan menjadi hilang (data lama akan terhapus).

Bentuk yang biasa dipakai untuk mengaktifkan file beserta pemeriksaan keberhasilannya adalah semacam berikut :

if (pf = fopen ("COBA. TXT", "w") == NULL)
{
printf ("File tidak dapat diciptakan ! \ n") ;
exit (1) ;    /* keluar dari program */
}
Mula-mula pf diisi dengan keluaran dari fungsi fopenO. Seandainya nilainya adal NULL (berarti operasi pengaktifan gagal), maka

  • pada layar ditampilkan tulisan : File tidak dapat diciptakan !
  • program dihentikan (selesai).


Menutup File
Apabila suatu file sudah tidak diproses lagi, maka file tersebut perlu ditutup. Hal seperti ini sangat penting terutama jika melakukan pemrosesan file yang jumlahnya lebih dari satu. Alasannya di antaranya adalah karena adanya keterbatasan jumlah file yang dapat dibuka secara serentak. Untuk menutup file, fungsi yang digunakan adalah fcloseO, dengan bentuk deklarasi sebagai berikut :
int fclose (FILE *pf) ;
dengan prototipe ada pada stdio.h.
Pada waktu pemanggilan fungsi ini, pf haruslah berupa variabel pointer bertipe FILE yang digunakan dalam pengaktifan file. Fungsi fclose0 menghasilkan keluaran berupa nol jika operasi penutupan berhasil dilakukan.
Di samping fcloseO, terdapat pula fungsi bernama fcloseall0 yang digunakan untuk menutup semua file yang sedang terbuka. Bentuk deklarasinya :
int fcloseall (void) ;
Fungsi ini menghasilkan nilai EOF (EOF didefinisikan pada stdio.h, yaitu bernilai —1) jika terjadi kegagalan. Sedangkan bila berhasil, keluaran fungsi berupa jumlah file yang ditutup.



Arrays

Array adalah menyimpan informasi dimensi. Variabel berisi sepotong informasi, sedangkan array berisi lebih dari satu sepotong informasi tipe yang sama. Jenis (angka, huruf, dan tipe user-defined) tidak dapat dicampur dalam array.

Namun, jenis kompleks ditetapkan pengguna dapat ditampung dalam array, yang memungkinkan Anda untuk menyimpan beberapa objek dengan berbagai data, berdampingan. Array dapat menjadi salah satudimensi atau multidimensi. Sebuah array satu dimensi agak seperti baris kotak di memori, di mana Anda dapat menempatkan nilai-nilai.

Anda dapat mendefinisikan sebuah array satu dimensi demikian:

int nIntegerArray[10];

Contoh ini menyatakan sebuah variabel tipe integer yang dapat berisi 10 individu angka, satu setelah other.You dapat mendefinisikan sebuah array satu dimensi demikian:
Suatu array dua dimensi, di sisi lain, seperti kotak kotak, seperti postal sorting pigeonholes. Sekali lagi, masing-masing slot di array dapat berisi nilai tunggal, tetapi Anda dapat menyimpan nilai-nilai di atas dan ke bawah, bukan hanya di sepanjang atau ke atas. Jika membantu, memikirkan itu seperti papan catur di mana masing-masing persegi dapat berisi sepotong set.

Jadi anda bisa mendefinisikan sebagai berikut:
int nChessBoard[8][8];
Bahkan, tidak ada batasan yang nyata di luar kapasitas komputer ke dimensi array. Anda bisa, misalnya, memiliki tiga dimensi array mewakili sebuah kubus nilai sebagai:

int nCube[8][8][8];
Meskipun Anda telah menyatakan array ini memiliki dimensi yang sama pada masing-masing pihak, ini tidak diperlukan. Anda bisa mendefinisikan array dengan nomor yang berbeda slot dalam satu dimensi ke yang lain. Sebuah kotak segi empat lokasi memori dapat dinyatakan sebagai berikut:
int nRectangle[8][4];
Jika Anda perlu untuk referensi lokasi, maka dapat diobati seolah-olah itu adalah variabel tunggal
slot dengan menunjukkan indeks ke dalam array menggunakan integer dalam kurung siku
setelah nama variabel. Jadi jika Anda ingin menempatkan nilai 3 di lokasi direferensikan oleh [baris, kolom] referensi [4,1], gunakan kode seperti:
nRectangle[4][1] = 3;
Catatan dari ini bahwa Anda akan memperlakukan lokasi array [4] [1] seolah-olah itu adalah satu
variabel integer. Ini indeks ke array berbasis-nol dengan kata lain,
elemen pada akhir array diindeks sebagai dimensi dari array minus satu. Lokasi pertama adalah direferensikan dengan indeks nol.
Seperti contoh pemrograman kebanyakan, ini paling baik dipahami dalam beberapa sederhana
baris kode yang digunakan sebagai ilustrasi:

int nArray[10]; // 10 elements
nArray[0] = 1; // The first element
nArray[9] = 10; // The last element
Perhatikan bahwa Anda tidak benar-benar tahu bagaimana komputer memilih untuk mengakses atau
mengatur array di memori. Ini hanyalah sepotong memori di mana Anda dapat
menyimpan informasi-Anda dapat mendeklarasikan dan akses tanpa mengetahui bagaimana array yang mendasari sedang dimanipulasi.
Ada juga beberapa properti khusus yang Anda dapat memanfaatkan saat menggunakan
array dalam aplikasi Anda. Biasanya array akan menjadi salah satu atau dua dimensi. A
array satu dimensi karakter, misalnya, atau dikenal sebagai string. Array dua dimensi yang sering digunakan untuk menyimpan representasi grafis layar.

Kelemahan satu dengan array adalah bahwa mereka statis. Artinya, Anda tidak dapat mengubah ukuran
sekali program yang telah ditulis. Array dapat menjadi ukuran pada waktu kompilasi,
mungkin bersyarat, tapi begitu program ini dibangun, array adalah tetap.

Hal ini karena ruang yang dibutuhkan adalah dalam program stack, atau lokal memori. Beberapa compiler akan menempatkan batas buatan 64KB di stack, yang adalah batas hanya nyata pada ukuran array yang dapat diumumkan.

Mekanisme untuk berkeliling ini disebut sebagai dinamic array, yang dapat diubah ukurannya
selama pelaksanaan program. Ini bukan bagian dari bahasa C dan akan
perlu dilaksanakan oleh programmer, tetapi itu adalah data yang cukup sederhana struktur untuk melaksanakan dan memanipulasi.

Anda akan belajar tentang beberapa jenis array dinamis dan mekanisme lain di kemudian hari,
tetapi penting untuk diingat bahwa array dinyatakan sebagai bagian dari program ini adalah
kerja statis, dan beberapa tambahan diperlukan untuk memanipulasi memori untuk memberikan
dinamis penyimpanan.

Enumerated Types
Jenis lain jenis, yang dikenal sebagai tipe enumerasi, memungkinkan Anda untuk membuat set nilai-nilai yang dirujuk oleh nama, tapi menghitung ke posisi indeks dalam kumpulan itu. Sebagai contoh, Anda mungkin ingin membuat tipe yang ditetapkan pengguna untuk menyimpan hari minggu ini:
enum week_days {
Mon = 0, Tue, Wed, Thu, Fri, Sat, Sun
};
Dalam contoh ini, compiler akan memberikan nilai 6 integer 0 sampai dengan hari-hari minggu ini, dalam urutan yang mereka terdaftar. Kemudahan dalam pemrograman istilah adalah bahwa kata Mon user-friendly dapat digunakan dalam program, daripada nilai 0.
Jadi, Anda mungkin menulis kode seperti:

week_days DayOfWeek;
Hal ini mendeklarasikan DayOfWeek variabel sebagai tipe yang sesuai. Anda dapat
memberikan nilai pada variabel sebagai berikut:

DayOfWeek = Wed;
Karena Anda telah dihitung hari ini untuk bilangan bulat, Anda juga dapat menggunakan operator standar untuk memanipulasi mereka. Ini adalah operator yang sama seperti Anda telah melihat dalam bab sebelumnya pada struktur bahasa C. Jika Anda menambahkan 1 sampai Wed, Anda tiba di nilai Thu, atau Kamis.

Jika Anda ingin menguji nilai antara Mon dan Jumat (hari kerja, untuk misalnya), istilah mungkin berisi:


((DayOfWeek >= Mon) && (DayOfWeek <= Fri)

Pembaca penuh perhatian akan mencatat beberapa hal. Yang pertama adalah bahwa contoh ini menggunakan standar built-in operator tipe, yang dimungkinkan oleh kenyataan bahwa yang disebutkan tipe sama dengan bilangan bulat. Hal kedua yang perlu diperhatikan adalah bahwa contoh berisi kondisi individu dalam tanda kurung.

Hal terakhir yang harus Anda perhatikan adalah penasaran & & simbol, yang Anda tidak belum datang di dalam eksplorasi Anda pemrograman dalam buku ini. Aku akan menangani logika laporan di kemudian hari, tetapi untuk sekarang Anda harus puas dengan mengetahui bahwa itu sarana and.

Contoh berbunyi sebagai berikut:''hari seminggu lebih besar dari atau sama dengan Senin'' dan'' kurang dari atau sama dengan Jumat'' . Dalam bahasa Inggris., Ini adalah  setara Senin sampai Jumat, inklusif.

Jika pernah perubahan nilai-nilai, semua yang perlu Anda lakukan adalah mengatur tipe enumerasi-the sisa kode akan tetap bekerja. Anda juga tidak perlu ingat bahwa Jumat telah ditetapkan angka minggu hari 4. Selain itu, Anda dapat menulis kode yang membandingkan dua nilai dari jenis yang sama tanpa khawatir tentang yang mendasari representasi.


Data Types and Variables
menutupi konsep dasar variabel dalam bab sebelumnya saat Anda melihat bagaimana mereka dapat diberi nama dan dinyatakan. Ingatlah bahwa kita bayangkan mereka sebagai nama slot (bayangkan pigeonholes) dalam memori, dengan tempat yang disediakan bagi setiap bagian data yang Anda ingin untuk menyimpan.

Selain itu, bab yang melihat bagaimana sebuah variabel didefinisikan dengan menetapkan nama
dan ketik:

int nMyNumber; // A simple variable
char szMyString[255]; // A 255 slot array
char * szString; // Pointer to char’s
Ini disebut deklarasi variabel. Setelah variabel telah dinyatakan, dapat hanya berisi data dari jenis yang tercantum dalam deklarasi. Operasi atas data pada variabel yang akan terbatas pada mereka yang didukung oleh tipe data.
Ingat juga bahwa, untuk memberikan nilai pada variabel, Anda menggunakan operator penugasan =. Jadi untuk menetapkan nilai numerik dengan nilai nMyNumber dinyatakan sebelumnya, Anda akan menggunakan kode seperti:

nMyNumber = 3;

Pengecualian untuk menggunakan operator penugasan adalah bahwa hal itu tidak bekerja dengan
array. Berikut ini, misalnya, bahkan tidak akan mengkompilasi:

szMyString = "Hello"; // Error
szString = "Hello"; // Error

You can, of course, assign values to individual elements to achieve this result:

szMyString[0] = ’H’;
szMyString[1] = ’e’;
szMyString[2] = ’l’;
szMyString[3] = ’l’;
szMyString[4] = ’o’;
Perhatikan bahwa contoh-contoh penggunaan tanda kutip tunggal sekitar nilai karakter dalam rangka untuk membedakannya dari sebuah string konstan. Untungnya, seperti yang akan Anda lihat nanti, C perpustakaan memberikan manipulasi string lebih baik daripada yang bisa Anda raih dalam satu Laporan beroperasi pada array.

Namun, ketika mereka diimplementasikan, ada kemungkinan bahwa, pada intinya, mereka beroperasi
pada array karakter dalam memori. Ini adalah contoh lain dari kompleks
jenis-satu yang Anda lihat untuk menggunakan slot bernama tunggal, tetapi yang mengandung lebih dari satu bagian dari data. Bahasa lain, bagaimanapun, menyediakan built-in tipe string, tapi di C itu adalah jenis yang ditetapkan pengguna, untungnya didasarkan sekitar spesifikasi ANSI untuk pengolahan itu.