Wednesday, 26 June 2013

subroutine & Perl basic part 6

oke, karena tutorial subroutinenya sebetulnya belum selesai, saya akan bahas lagi lanjutan tentang subroutinenya. sekarang saya akan bahas bagaimana caranya menulis, dan membaca ke file berformat txt. yang nantinya bisa dipakai untuk macem2, entah itu menyimpan variable, atau menjadi database untuk mengambil variable.

membuka file
untuk membuka file di perl cukup mudah, yaitu dengan menuliskan "open var , mode , file" dengan $var adalah nama variable yang akan digunakan untuk menyimpan isi file untuk nantinya di proses, mode adalah mode yang digunakan untuk membuka file, dan file adalah nama dan direktori file yang akan dibuka.
contoh :



sub belajar {
open (FILE, "<", "file.txt");
}

atau bisa juga seperti ini

sub belajar {
open (FILE, "<", "C:/openkore/file.txt");
}

perbedaan yang atas dan yang bawah adalah, pada script atas file.txt berada pada direktori yang sama, sedangkan pada script dibawah file.txt berada pada direktori yang diperjelas. tanda "<" adalah mode yang dipakai, yaitu berarti membaca file saja. selain cara diatas, membuka file juga dapat dilakukan dengan menggunakan tanda . yang berarti direktori yang sama, atau .. yang berarti parent direktori.
contoh :

sub belajar {
open (FILE, "<:", "./file/file.txt");
}

pada sub diatas, file.txt berada di direktori openkore/file/file.txt

ketiga sub diatas akan menyimpan isi file.txt di FILE sebagai penghubung antara directory dan perl. sehingga bisa dikatakan bahwa FILE = file.txt.

adapun mode membuka file adalah sebagai berikut.

mode
diatas kita sudah membahas cara membuka file dengan mode >. berikut ini akan saya lampirkan jenis2 mode yang bisa dipakai untuk membuka file dan kegunaannya masing2.

<   : adalah mode untuk memindahkan file ke nama var yg kita buat.
>   : adalah mode untuk memindahkan file ke nama var yang kita buat, namun juga bisa untuk meniban file dengan file yang baru
>> : adalah mode untuk memindahkan file ke nama var yang kita buat, namun juga bisa untuk menulis file dengan input yang kita inginkan di baris baru dipaling belakang file.

jika file yang ingin dibaca tidak ada dan kita ingin perl langsung membuat file tersebut. kita dapat menambahkan tanda + di depan mode dengan tujuan langsung membuat file tersebut.

+<    : membaca dan membuat
+>    : membaca menulis dan membuat
+>>  : membaca menulis dibawah dan membuat

contoh :

untuk membaca saja
sub belajar {
open (FILE, "<", "./file/file.txt");
}

untuk menulis ulang
sub belajar {
open (FILE, ">", "./file/file.txt");
}

untuk menulis di baris paling bawah
sub belajar {
open (FILE, ">>", "./file/file.txt");
}

menutup file
tadi kita sudah belajar cara membuka file, namun begitu dibuka, file akan terus dibuka oleh program sehingga  data FILE akan selalu ada di dalam ram. jika terus menerus terjadi maka dapat memenuhi ram dengan FILE yang kita buka. maka untuk menutup FILE kita perlu menggunakan comand "close (nama_file)"
contoh :

sub belajar {
open (FILE, "<", "./file/file.txt");
close (FILE);
}

memindahkan data ke array
diatas kita sudah belajar untuk memindahkan data ke FILE sebagai tempat temporer untuk file yang kita baca. namun untuk bisa di proses lebih mudah, kita perlu untuk memindahkan FILE ke array. disini saya akan langsung memberikan contoh FILE ke array
contoh :

sub belajar {
open (FILE, "<", "./file/file.txt");
my @array = <FILE>;
close (FILE);
}

anggap saja file.txt memiliki isi sebagai berikut tiap barisnya.

abc
def
geh

maka @array akan memiliki nilai :

@array = ("abc","def","geh")
atau
@array[0] = abc
@array[1] = def
@array[2] = geh

menulis data ke file
sebelumnya kita sudah belajar mengenai mode2 yang dibutuhkan untuk membuka file. sekarang bagaimana cara kita menulis data yang kita inginkan ke file. tentu saja kita harus menggunakan mode > atau >> untuk melakukannya. perintah untuk menulis file sendiri adalah "print nama_file yang_ditulis" jika kita menggunakan mode >, maka print akan menghapus smua data di dalam file dan menulis data baru yang kita inginkan. namun jika menggunakan mode >> maka data akan tetap ada, dan perl akan menulis file yang kita inginkan di belakang file tersebut
contoh :

file.txt berisi data berikut :
abc

untuk menggantinya menjadi 123 kita harus menggunakan perintah seperti ini :

sub belajar {
open (FILE, ">", "./file/file.txt");
print FILE "123";
close <FILE>
}

maka isi file.txt akan berubah menjadi :
123

namun jika kita ingin abc tetap ada dan program menuliskan kata baru disebelahnya kita dapat menulis seperti ini :

sub belajar {
open (FILE, ">>", "./file/file.txt");
print FILE " 123";
close <FILE>
}

maka isi file.txt akan berubah menjadi :
abc 123

menggunakan looping dengan file
kita dapat menggunakan while dan foreach untuk mencari suatu file atau mereplace suatu file. disini saya akan membahas cara menggunakan looping dengan kedua perintah tersebut pada file.

while
pada while kita dapat menggunakan condition while (my $a = <FILE>) untuk memindahkan tiap baris FILE kedalam $a. lalu menggunakan perintah chomp yang berarti membaca dari baris perbaris file.
contoh :

file.txt berisi data sebagai berikut :
a
b

lalu kita ingin mencari apakah ada "b" atau tidak di file

sub belajar {
my $a = "b";
my $result;
open (FILE, "<", "./file/file.txt");
while (my $line = <FILE>) {
    chomp ($line);
    $result = ($line =~ m/$a/o);
    }
close (FILE);
return $result;
}

sub diatas akan memberikan result berupa angka 1 karena ada "b" didalam file, namun jika tidak ada, result akan berupa angka 0.

foreach
penggunaan foreach dapat dilakukan dengan memindahkan FILE ke array lalu memprosesnya melalui foreach. foreach dapat dipakai untuk menulis ulang data ataupun hanya mencocokan data.
contoh :

file.txt berisi data sebagai berikut :
a
b

lalu kita ingin mencari apakah ada "b" atau tidak di file

sub belajar {
my $a = "b";
my $result;
open (FILE, "<", "./file/file.txt");
my @line = <FILE>;
foreach $line(@line) {
    $result = ($line =~ m/$a/o);
    }
return $result;
close (FILE);
}

jika kita ingin mengubah "b" menjadi "c"

sub belajar {
my $a = "b";
my $result;
open (FILE, ">", "./file/file.txt");
my @line = <FILE>;
foreach $line(@line) {
    if ($line =~ /$a/) {
         $line =~ s/$a/c/g;
         }
    }
print FILE @line;
close (FILE);
}

maka file.txt akan berubah menjadi :
a
c

menggunakan mode utf:8 untuk meminimalisir error
kita tau bahwa pada ragnarok dan openkore kerap digunakan tanda baca seperti • ™ ^ * dll. agar tanda tersebut dapat dibaca oleh subroutine tanpa menghasilkan error, ada perlunya kita menambahkan mode utf8 di command membuka file. saya akan langsung memberikan contoh membuka dengan utf8 dibawah ini :

open (FILE, "<:utf8", "./file/file.txt")
atau
open (FILE, ">:utf8", "./file/file.txt")
atau
open (FILE, ">>:utf8", "./file/file.txt")

No comments:

Post a Comment