Tuesday, September 15, 2015

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!

No comments:

Post a Comment