close
在Trace中途接手的專案,常以關鍵字搜尋未知的原始程式碼,期能在最短時間找到原因解決之.
若學會Regular Expression,搜尋過程往往能事半功倍,所付出的代價就是要學會該Regular Expression,這是必然.
以輸入法為例,注音輸入法是國人不學而會的中文輸入法,倉頡,嘸蝦米總要付出學習的過程才能打字比別人快.
好像也有IDE支援可以針對全面的java, jsp, xml, html, ini進行Regular Expression的搜索與替換.
而我目前也寫了一支可以在EditPlus下跑的搜尋程式,列出關鍵字所在的源碼檔與該列程式碼與附上列號.
下面可程式當然可以再補強,可針對不只一個目錄搜尋,雖無華麗的GUI介面,至少在本案上幫了不少忙:
#!/usr/bin/perl
my $path = "D:/Project/RDF/workspace/fb/src/com/systex/fb"; # 指定搜尋目錄
my $suffix = "java"; # 檔尾, 通常指副檔名, 亦可設成java|jsp表示連jsp一起搜
my $code = 0; # 0:顯示程式行號與內容 -1:只顯示檔名
my $path = "D:/Project/RDF/workspace/fb/src/com/systex/fb"; # 指定搜尋目錄
my $suffix = "java"; # 檔尾, 通常指副檔名, 亦可設成java|jsp表示連jsp一起搜
my $code = 0; # 0:顯示程式行號與內容 -1:只顯示檔名
sub searchWord {
my $file = shift;
open F, $file or die "error:$!";
my $line_no = 0;
while (<F>) {
$line_no++;
if (/Simulat/i) { # \"cust_?id[^\"]*/i jdbc\:oracle\:thin\:
print "$file \n" if($code < 1);
last if($code == -1);
print "$line_no\t$_";
$code = 1;
}
}
if($code == 1) {
$code = 0;
print "\n"; ## 換檔案空一行
}
close F;
}
my $file = shift;
open F, $file or die "error:$!";
my $line_no = 0;
while (<F>) {
$line_no++;
if (/Simulat/i) { # \"cust_?id[^\"]*/i jdbc\:oracle\:thin\:
print "$file \n" if($code < 1);
last if($code == -1);
print "$line_no\t$_";
$code = 1;
}
}
if($code == 1) {
$code = 0;
print "\n"; ## 換檔案空一行
}
close F;
}
sub searchDir {
my $dir = shift;
opendir(DIR, $dir) or die "error:$!";
my @dirs = readdir(DIR);
closedir DIR;
for (@dirs) {
unless (/\.$/) {
my $dir1 = "$dir/$_";
if (-d $dir1) { # 目錄
## print "search $dir1 ...\n";
&searchDir($dir1);
} else {
## print "Find>> $dir1 ...\n";
# &searchWord($dir1);
&searchWord($dir1) if ($dir1 =~ /${suffix}$/);
#if ($dir1 =~ /\/I[A-Za-z0-9]+Action\.java/) {
# print "$dir1\n";
#}
}
}
}
}
my $dir = shift;
opendir(DIR, $dir) or die "error:$!";
my @dirs = readdir(DIR);
closedir DIR;
for (@dirs) {
unless (/\.$/) {
my $dir1 = "$dir/$_";
if (-d $dir1) { # 目錄
## print "search $dir1 ...\n";
&searchDir($dir1);
} else {
## print "Find>> $dir1 ...\n";
# &searchWord($dir1);
&searchWord($dir1) if ($dir1 =~ /${suffix}$/);
#if ($dir1 =~ /\/I[A-Za-z0-9]+Action\.java/) {
# print "$dir1\n";
#}
}
}
}
}
&searchDir($path);
全站熱搜