Showing posts with label perl. Show all posts
Showing posts with label perl. Show all posts

Tuesday, September 15, 2015

Counting All Word Occurrence using Perl

Saya akan menjelaskan salah satu penggunaan Perl yang paling sering yaitu menghitung kemunculan sebuah kata dalam file. Dalam contoh di bawah ini, kita akan mengambil seluruh kata unik yang muncul dalam sebuah file dan menghitung jumlah kemunculannya.

#!/usr/bin/env perl
use strict;
use warnings;

my %temp;
my $file = "input.txt";
open my $fh, '<', $file or die "File Cannot be Opened";
while (my $line = <$fh>) {
    chomp $line;
    foreach my $str (split /\s+/, $line) {
        $temp{$str}++;
    }
}

foreach my $str (sort keys %temp) {
    print $str." occurs ". $temp{$str}." times"."\n";
}

Pertama-tama, kita men-define variable hash %temp untuk menyimpan daftar seluruh kata-kata yang muncul. Tipe variable dalam Perl lebih jauh dapat dipelajari disini. Silahkan define juga nama file yang akan kita baca. Disini kita akan mengakses dokumen "input.txt".


my %temp;
my $file = "input.txt";
open my $fh, '<', $file or die "File Cannot be Opened";

Berikutnya, line ini akan melakukan looping untuk setiap baris dalam file "input.txt".
Untuk setiap line tersebut, kita akan melakukan splitting based on karakter spasi ' '. Untuk setiap kata yang dihasilkan dari proses splitting tersebut, akan disimpan ke dalam hash (key, value). Setiap kemunculan key dalam hash, value-nya akan ditambah 1.


while (my $line = <$fh>) {
    chomp $line; #hapus semua whitespace \n
    foreach my $str (split /\s+/, $line) {
        $temp{$str}++;
    }
}

Line berikut akan melakukan looping ke seluruh hash, lalu mencetak isinya:


foreach my $str (sort keys %temp) {
    print $str." occurs ". $temp{$str}." times"."\n";
}

Hasilnya adalah sebagai berikut:


10 occurs 1 times
12 occurs 1 times
15 occurs 1 times
19 occurs 2 times
20 occurs 1 times
26 occurs 1 times
3 occurs 1 times
35 occurs 1 times
42 occurs 1 times
7 occurs 2 times
9 occurs 1 times
Bill: occurs 1 times
Jeff: occurs 1 times
Jill: occurs 1 times
John: occurs 2 times
Linda: occurs 1 times
Pam: occurs 1 times
Phil: occurs 1 times
Sam: occurs 1 times
Sue: occurs 1 times
Team occurs 3 times

Selamat mencoba!

File Operation on Perl

Kali ini saya akan menjelaskan cara melakukan operasi baca dan tulis file di Perl. Perl banyak digunakan untuk melakukan pattern matching dan text processing. Di tutorial ini, saya akan memberikan contoh cara membuka file, mencocokkan pattern dalam sebuah file, lalu menuliskan hasilnya ke file lain apabila ada pattern yang match. Case ini dapat anda kembangkan sendiri untuk file processing sesuai kebutuhan anda.

 #!/usr/bin/env perl  
 use warnings;  
 use strict;  

 my $filename = 'July2014WLS_SOA1.out';  
 my $fileout = 'outputError.txt';  
 open (my $fh, '<', $filename) or die "cannot open input file $filename \!";  
 open (my $foh, '>', $fileout) or die "cannot open output file $filename \!";  
 my $count = 1;  
 while (my $myline = <$fh>){  
      if ($myline =~ m/^<[eE]rror>$/g || $myline =~ m/[eE]xception/g){  
           say $foh "Line $count : $myline";  
      }  
      if (lc $myline =~ "caused by"){  
           say $foh "Line $count : $myline \n \n \n"  
      }  
      $count++;  
 }  
 close $fh;  
 close $foh;  

Kita mulai dengan men-specify nama file yang akan kita buka, dan nama file output yang akan ditulis:


 my $filename = 'July2014WLS_SOA1.out';  
 my $fileout = 'outputError.txt';   

Operasi baca dan tulis menggunakan syntax yang sama yaitu 'open(param1, param2, param3)'. Perbedaannya adalah di param2, dimana kita menggunakan tanda '<' untuk operasi baca, dan tanda '>' untuk operasi tulis.


 open (my $fh, '<', $filename) or die "cannot open input file $filename \!";  
 open (my $foh, '>', $fileout) or die "cannot open output file $filename \!";    

Line berikutnya akan melakukan looping seluruh baris yang ada dalam dokumen. Anda dapat melakukan operasi yang anda inginkan dalam Bracket While yang ada. Isi current line dapat diakses dalam variable $myline.

  
 my $count = 1;  
 while (my $myline = <$fh>){  
      # insert your Operation here
 }  
 close $fh;  
 close $foh;  

Dalam code diatas, operasi yang saya lakukan adalah membaca setiap line, lalu melakukan matching pattern:
1. Apabila baris tersebut mengandung kata Exception atau exception, tulis line ke berapa error tersebut muncul, kemudian tuliskan errornya
2. Apabila baris tersebut mengandung kata "caused by", tulis juga line berapa error tersebut muncul dan apa isi line tersebut

  
      if ($myline =~ m/^<[eE]rror>$/g || $myline =~ m/[eE]xception/g){  
           say $foh "Line $count : $myline";  
      }  
      if (lc $myline =~ "caused by"){  
           say $foh "Line $count : $myline \n \n \n"  
      }  
      $count++;  

Terakhir, kita close file yang sedang kita proses dengan perintah close sbb:

  
 close $fh;  
 close $foh;  

That's it, anda dapat menggunakan snippet code diatas untuk melakukan operasi file yang anda inginkan. Semoga membantu!