Nama : Afridho Ikhsan Fernanda
Kelas : 1id07
NPM : 30419262
File Input dan Output
File input berarti data yang ditulis ke dalam file dan file
output berarti data yang dibaca dari sebuah file. Sebenarnya, istilah input dan
output lebih terkait dengan input dan output layar. Saat kita menampilkan
hasilnya di layar, itu disebut output. Begitu pula jika kita memberikan
beberapa masukan ke program kita dari command prompt, maka itu disebut input.
Sebelumnya kita sudah sering melakukan input output berupa
karakter di layar menggunakan fungsi cout dan cin yang
disediakan oleh pustaka iostream. Tapi
bukan hanya itu, pada bahasa pemrograman C/C++ juga menyediakan pustaka yang
berfungsi untuk melakukan tugas Input dan Output berupa
sebuah file, seperti:
·
ofsteam: Merupakan sebuah tipe data output yang
memungkinkan kita untuk melakukan pembuatan dan menulis informasi pada file.
·
ifstream: Merupakan sebuah tipe data input yang
memungkinkan kita melakukan pembacaan informasi dari file.
·
fstream: Merupakan sebuah tipe data input output file yang
memungkinkan kita untuk melakukan kedua hal tersebut, seperti membuat, menulis
dan membaca informasi dari file.
A.
Membuka
dan Menutup File
1.
Membuka
File
Untuk dapat melakukan input output yang
diterapkan kepada file fisik, kita membutuhkan pengait, hal
itu disebut sebagai “open file” atau membuka file. Untuk
memberikan perintah membuka file dengan obyek steam, kita
menggunakan function seperti di bawah ini.
Bentuk tulisan :
open(namafile, mode);
Nama file:
merupakan tempat dimana sebuah argumen untuk menuliskan nama dari
sebuah file yang akan di buka.
Mode :
adalah sebuah tempat dimana kita dapat mengisikan banyak flag sebagai
argumen untuk mendefinisikan jenis mode dalam menangani file tersebut.
Di bawah ini adalah
macam-macam flag yang dapat digunakan untuk mendefinisikan
mode pada operasi sebuah file:
Dari macam-macam flag yang disebutkan di
atas, kita dapat mengkombinasikan lebih dari satu atau bahkan semuanya. Untuk
penulisanya setiap flag akan dipisahkan dengan tanda.
ofstream fileku;
fileku.open("filenya.txt
", ios::out | ios::in | ios::app | ios::trunc);
File Operation Modes
Sebelum kita mulai bekerja
dengan file apapun menggunakan program komputer, kita perlu membuat file baru
jika tidak ada atau membuka file yang sudah ada. Dalam kedua kasus tersebut,
kita bisa membuka file dalam mode berikut
§ Read-Only Mode - Jika
Anda hanya akan membaca file yang ada dan Anda tidak ingin menulis konten lebih
lanjut dalam file, maka Anda akan membuka file dalam mode read-only. Hampir
semua bahasa pemrograman menyediakan sintaks untuk membuka file dalam mode
read-only.
§ Mode Write-Only - Jika
Anda ingin menulis file yang ada atau file yang baru dibuat namun Anda tidak
ingin membaca konten tertulis dari file tersebut, maka Anda akan membuka file
tersebut dalam mode penulisan-tulis saja. Semua bahasa pemrograman menyediakan
sintaks untuk membuka file dalam mode write-only.
§ Read & Write Mode - Jika
Anda akan membaca dan juga menulis ke file yang sama, maka Anda akan membuka
file dalam mode baca & tulis.
§ Append Mode - Bila Anda membuka
file untuk menulis, ini memungkinkan Anda untuk mulai menulis dari awal file;
namun akan menimpa konten yang ada, jika ada. Misalkan kita tidak ingin menimpa
konten yang ada, maka kita buka file tersebut di append mode. Mode Append
akhirnya adalah mode tulis, yang memungkinkan konten ditambahkan pada akhir
file. Hampir semua bahasa pemrograman menyediakan sintaks untuk membuka file
dalam append mode.
2.
Menutup
File
Untuk
melakukan penulisan terhadap sebuah file yang telah kita buka,
membutuhkan sebuah operator yang dinamakan Stream Insertion Operator <<
mirip seperti apa yang kita lakukan saat menggunakan
obyek cout
, sebagai
gantinya kita di sini menggunakan ofstream
atau fstream
.
B.
Membaca Sebuah File
Untuk membaca informasi dari sebuah file yang
telah kita buka kedalam program kita, membutuhkan sebuah Sream
Extraction Operator >>
. Mirip seperti apa yang kita lakukan saat menggunakan
obyek cin
. Sebagai gantinya
kita menggunakan ifstream
atau fstream
.
C. Contoh Operasi File (Membuka,
Menulis, Membaca dan Menutup File)
Setelah
semua penjelasan di atas, saatnya kita melakukan percobaan membuat program
untuk melakukan operasi file. Alur operasi sebuah file masih
sama seperti penjeasan di atas, dimana kita harus membuka file terlebih
dahulu, melakukan operasi seperti menulis dan membaca informasi dan jika sudah
selesai kita akan melakukan penutupan file.
Contoh program:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#include <fstream>
#include <iostream>
using namespace std;
int main
() {
string baris;
// membuka file dalam mode menulis.
ofstream outfile;
// menunjuk ke sebuah nama file
outfile.open("contohfile.txt");
cout << ">= Menulis file, \'q\' untuk
keluar" <<
endl;
//unlimited loop untuk menulis
while(true){
cout << "- ";
//mendapatkan setiap karakter dalam satu baris
getline(cin, baris);
//loop akan berhenti jika anda memasukan karakter q
if(baris == "q") break;
// menulis dan memasukan nilai dari 'baris' ke dalam file
outfile << baris << endl;
}
//selesai dalam menulis sekarang tutup filenya
outfile.close();
//Membuka file dalam mode membaca
ifstream infile;
//menunjuk ke sebuah file
infile.open("contohfile.txt");
cout << endl << ">= Membuka dan
membaca file " <<
endl;
//jika file ada maka
if (infile.is_open())
{
//melakukan perulangan setiap barus
while ( getline (infile,baris) )
{
//dan tampilkan di sini
cout << baris << '\n';
}
//tutup file tersebut setelah selsai
infile.close();
}
//jika tidak ditemukan file maka akan menampilkan ini
else cout
<< "Unable to open file";
return 0;
}
|
File I/O dalam Java
Java menyediakan fungsi untuk handle file input
output. Di sini, kita akan melihat program Java sederhana, Program ini akan
membuka file teks, menulis beberapa baris teks ke dalamnya, dan menutup file
tersebut. Akhirnya, file yang sama dibuka dan kemudian dibaca dari file yang
sudah dibuat. Anda bisa mencoba menjalankan program berikut untuk melihat
hasilnya
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import
java.io.*;
public
class DemoJava {
public
static void main(String []args) throws IOException {
File
file = new File("/tmp/java.txt");
//
Create a File
file.createNewFile();
//
Creates a FileWriter Object using file object
FileWriter
writer = new FileWriter(file);
//
Writes the content to the file
writer.write("This
is testing for Java write...n");
writer.write("This
is second line...n");
//
Flush the memory and close the file
writer.flush();
writer.close();
//
Creates a FileReader Object
FileReader
reader = new FileReader(file);
char
[] a = new char[100];
//
Read file content in the array
reader.read(a);
System.out.println(
a );
//
Close the file
reader.close();
}
}
|
Outputnya
adalah:
1
2
|
This is
testing for Java
write...
This is
second line...
|
File I/O dalam Python
Program berikut menunjukkan fungsionalitas yang sama untuk membuka file
baru, menulis beberapa konten ke dalamnya, dan akhirnya, baca file yang sama
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# Create
a new file
fo =
open("/tmp/python.txt",
"w")
# Writes
the content to the file
fo.write(
"This is testing for Python write...n");
fo.write(
"This is second line...n");
# Close
the file
fo.close()
# Open
existing file
fo =
open("/tmp/python.txt",
"r")
# Read
file content in a variable
str
= fo.read(100);
print
str
# Close
opened file
fo.close()
|
Outputnya
adalah:
1
2
|
This is
testing for Java write...
This is
second line...
|
Fungsi Input dan Output
Input adalah sesuatu data yang kita masukan ke dalam
program.
Input biasanya diambil dari perangakat inputan seperti
keyboard, mouse, kamera, microphone, dll.
Proses adalah langkah-langkah yang harus dilakukan program
untuk menghasilkan output.
Output adalah informasi yang dihasilkan setelah dilakukan
proses. Output biasanya ditampilkan ke layar komputer.
Pada bahasa pemrograman C, terdapat beberapa fungsi dasar
untuk menampilkan output dan mengambil input.
Fungsi Output pada C
Ada dua macam
fungsi yang bisa digunakan untuk menampilkan output:
1. Fungsi printf()
Fungsi printf()
merupakan
fungsi untuk menampilkan output ke layar komputer. Fungsi ini terdapat pada
library stdio.h
.
Oleh sebab itu,
ketika kita diharuskan untuk menuliskan #include
<stdio.h>
di bagian atas program agar bisa menggunakan fungsi
ini.
Berikut ini
struktur dasar fungsi printf()
:
Perhatikan:
"format"
adalah
sebuah teks (string) untuk ditampilkan. Lalu tanda ...
akan berisi
sebuah variabel atau nilai untuk ditampilkan berdasarkan format yang diberikan
pada teks "format"
.
Mari kita lihat
contohnya:
Buatlah sebuah
program C bernama output.c
, lalu isi dengan
kode berikut.
#include
<stdio.h>
int
main
(){
printf(
"Hello, ini adalah teks output\n"
);
printf(
"Nama saya %s\n"
,
"Dian"
);
printf(
"Usia saya %d\n"
,
20
);
return
0
;
}
Hasilnya:
Ada beberapa hal
yang perlu di perhatikan…
Pada fungsi printf()
kita
menggunakan simbol %s
, %d
, dan \n
untuk
format teks.
Mari kita bahas
arti dari simbol tersebut:
%s
adalah
simbol untuk menampilkan nilai string;
%d
adalah
simbol untuk menampilkan nilai angka atau bilangan desimal;
\n
adalah
simbol untuk membuat baris baru.
Selain tiga
simbol tersebut, masih banyak lagi simbol yang lain.
Simbol
|
Arti atau Fungsi
|
%c
|
untuk
menampilkan karakter
|
%s
|
untuk
menampilkan teks (string)
|
%d , %i
|
untuk
menampilkan bilangan desimal
|
%f
|
untuk
menampilkan bilangan pecahan
|
%o
|
untuk
menampilkan bilangan oktal
|
%x
|
untuk
menampilkan bilangan heksadesimal
|
\t
|
untuk
membuat tabs
|
2. Fungsi puts()
Fungsi puts()
adalah
fungsi untuk menampilkan output. Fungsi ini juga terdapat pada library stdio.h
.
Perbedaanya
dengan printf()
, fungsi puts()
tidak
memerlukan format.
Fungsi puts()
akan selalu
membuat baris baru. Jadi tidak perlu menggunakan simbol \n
seperti
pada printf()
.
Contoh program: fungsi_puts.c
#include
<stdio.h>
int
main
(){
puts(
"Hello World"
);
puts(
"Nama Saya Dian"
);
return
0
;
}
Hasilnya:
Selain fungsi puts()
, terdapat juga fungsi putchar()
yang khusus untuk
menampilkan satu karakter saja.
Contoh:
#include
<stdio.h>
int
main
(){
putchar(
'A'
);
return
0
;
}
Maka akan
menghasilkan output:
A
Lalu
pertanyaannya:
Fungsi manakah
yang harus saya pakai?
Jawabannya,
tergantung…
Tergantung dari
teks apa yang akan ditampilkan.
Apabila di sana
kita akan menampilkan teks dan nilai atau variabel, sebaiknya menggunakan printf()
karena bisa
membuat format.
Tapi kalau teks
yang biasa saja, bisa pakai puts()
.
Fungsi Input pada C
Pada bahasa C,
terdapat beberapa fungsi unutk mengambil input.
Oh iya, input
yang akan kita bahas di sini adalah input dari keyboard.
Input juga bisa
dari file, kamera, mikrofon, dan sebagainya.
Tapi kita fokus
dulu bahas yang paling mudah…
Ini adalah fungsi
untuk mengambil input dari keyboard:
1. Fungsi scanf()
Fungsi scanf()
adalah
fungsi untuk mengambil input dari keyboard. Fungsi ini memiliki format seperti
fungsi printf()
.
Format yang
diberikan tergantung dari jenis tipe data apa yang ingin kita ambil.
Misalnya mau
mengambil angka, maka kita bisa pakai %d
atau %i
.
Mari kita lihat
contohnya:
#include
<stdio.h>
int
main
() {
// membuat variabel
char
name[
20
], web_address[
30
];
printf(
"Nama: "
);
scanf(
"%s"
,
&
name);
printf(
"Alamat web: "
);
scanf(
"%s"
,
&
web_address);
printf(
"\n------------------------------\n"
);
printf(
"Nama yang diinputkan: %s\n"
, name);
printf(
"Alamat Web yang diinputkan: %s\n"
, web_address);
return
0
;
}
Hasilnya:
Tapi saat kita menginputkan teks yang mengandung spasi,
hasilnya akan dipecah menjadi dua seperti ini:
Untuk mengatasi masalah ini, kita bisa ubah format yang
digunakan pada scanf()
menjadi seperti ini:
printf(
"Nama: "
);
scanf(
"%[^\n]s"
, name);
Maka fungsi scanf()
akan menerima spasi.
Dalam menggunakan scanf()
, kita dianjurkan menggunakan
simbol &
sebelum nama variabel.
Contoh:
#include
<stdio.h>
void
main
(){
int
a, b, c;
printf(
"Inputkan nilai a: "
);
scanf(
"%i"
,
&
a);
printf(
"Inputkan nilai b: "
);
scanf(
"%i"
,
&
b);
c
=
a
+
b;
printf(
"Hasil a + b: %i"
, c);
}
Simbol &
berfungsi untuk mengambil alamat memori dari
sebuah variabel.
Fungsi scanf()
membutuhkan tempat untuk menyimpan nilai yang
akan diinputkan.
Karena itu kita memberikan simbol &
di depan nama variabel untuk
menentukan alamat memori yang akan digunakan oleh scanf()
.
Nanti ini akan kita bahas lagi pada Pointer.
2. Fungsi gets()
Fungsi gets()
adalah fungsi untuk mengambil input dalam
satu baris. Fugnsi gets()
tidak memerlukan format seperti scanf()
.
Contoh:
#include
<stdio.h>
int
main
() {
char
name[
50
], web_address[
50
];
printf(
"Nama: "
);
gets(name);
printf(
"Alamat web: "
);
gets(web_address);
printf(
"You entered: %s\n"
, name);
printf(
"Web address: %s\n"
, web_address);
return
(
0
);
}
Hasilnya:
Saat melakukan kompilasi, kita akan mendapatkan
peringatan:
warning: the
`
gets'
function
is dangerous and should not be used.
Ini bukan error, melainkan hanya peringatan saja agar
tidak menggunakan fungsi gets()
.
Mengapa?
Karena dapat menyebabkan masalah buffer overflow pada program. 1
Lalu bagaimana solusinya?
Kita bisa menggunakan:
3. Fungsi fgets()
Fungsi fgets()
lebih aman dibandingkan gets()
, karena kita bisa menentukan
ukuran buffer dan sumber inputan.
Ukuran buffer adalah batas ukuran panjang string yang
diinputkan. Lalu stdin
adalah sumber inputan dari keyboard.
Kita juga bisa mengambil input dari file dengan fgets()
dengan memasukan
pointer FILE
pada stdin
.
Untuk lebih jelasnya, mari kita lihat contohnya:
#include
<stdio.h>
int
main
(){
char
name[
50
], email[
50
];
printf(
"Nama: "
);
fgets(name,
sizeof
(name), stdin);
printf(
"Email: "
);
fgets(email,
sizeof
(email), stdin);
printf(
"\n-------------------------\n"
);
printf(
"Nama anda: %s"
, name);
printf(
"Alamat email: %s"
, email);
return
0
;
}
Hasilnya:
Pada contoh program di atas, kita menggunakan fungsi sizeof()
untuk mengambil ukuran
buffer dari variabel.
Ukuran ini akan menjadi batas maksimum dari inputan.