這案子後期用Perl機會難得的多,就出個Java的跨行比對的Perl版。第一步,Java將javaue.def檔案內容轉成一個String,Perl如法泡製更簡單,因為不太用,不得其法:

  一般是@lines = <F>;來將檔案內容全存進陣列變數,若是$line = <F>則只存第一列。而想$line涵蓋檔案內容,必須先執行undef $/;才行。$/是換行變數,預設是\n,可以改變它為其它字符,而undef它表示使用鑽石符號<>不必分列讀進,一口氣英文…不,一口氣讀進變數。

  第二,比對出多個符合pattern,我竟沒Java熟,但真的有比Java簡單,一直以為是帶gm參數,g是全域,m是多列,但真正的是gs,s是把\n也當成小數點(任意字元),所以第一行的Definition for table可以比對下N行的End of definition。以下飯粒有標紅字是這兩大重點。

#!/usr/bin/perl
sub handleBlock {
    my $block = shift;
    @lines = split/\n/, $block;
    print $lines[0] . "\n";
}

undef $/;
open F, "./javaue.def" or die "$!";
$ctx = <F>;
close F;

while ($ctx =~ /(Definition for table .*?End of definition)/gs) {
    handleBlock($1);
}

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Jemmy 的頭像
    Jemmy

    Jemmy Walker

    Jemmy 發表在 痞客邦 留言(2) 人氣()