**脚本说明:
遍历$src_dir的路径,然后对每个文件的每一行进行判断,看是否包含全角字符。
全角字符判断采用如下判断:
/^[\x8\x9\xa\xd\x20-\x80]*$/
判断依据:
ASCII码数值 8、9、10 和 13 可以分别转换为退格符、制表符、换行符和回车符。
英文的可显示字符的ASCII码的范围是32而汉字是双字节编码,汉字编码的第一字节的ASCII是大于127的,
判断一个字符的ASCII 码如果大于127那它应该是汉字的第一字节。
#!/usr/bin/perl
#查看一个目录中的所有文件
#不判断所有注释
#输出含有双字节(非英文)的文件名、行
#
#用于自动化查看国际化是否完整
my $src_dir = "/opt/" ;
my $count_total = 0 ;
my $count_valid = 0 ;
my @filelist ;
&listdir("$src_dir") ;
foreach $filename ( @filelist ) {
# print "\n\n"."==================================================================="."\n" ;
# print "File name : $filename\n" ;
if ( $filename !~ /\.cgi$/ &&
$filename !~ /\.pl$/ ) {
next ;
}
if ( $filename =~ /\/lang_Jpn.pl$/ ) {
next ;
}
if ( $filename =~ /\/cmn_lang_Jpn.pl$/ ) {
next ;
}
open (IN , "$filename") or die "Can't open the file: $_";
my $line_no = 0 ;
while () {
my $tmp = $_ ;
$line_no ++ ;
if ($tmp =~ /^\s*$/) { #blank line
next ;
}
elsif ($tmp =~ /^\s*#/ ) { # line of comments
next ;
}
elsif ($tmp =~ /^([^#]*)\s+#/ ) { # comments at the end
my $tmp_str = $1 ;
if ($tmp_str !~ /^[\x8\x9\xa\xd\x20-\x80]*$/ ) {
&markline($filename , $line_no , $tmp ) ;
}
}
elsif ($tmp =~ /^([^#]*);\s*#/) {
my $tmp_str = $1 ;
if ($tmp_str !~ /^[\x8\x9\xa\xd\x20-\x80]*$/ ) {
&markline($filename , $line_no , $tmp ) ;
}
}
else {
#maybe include some comment at the end ,just like "if(){#comments" ,
#judge it by your eyes.
if ( $tmp !~ /^[\x8\x9\xa\xd\x20-\x80]*$/) {
&markline($filename , $line_no , $tmp ) ;
}
}
}
close (IN) ;
}
#functions
sub listdir {
my @arr, $j = 0;
for($i=0;$i<=$#_;$i++) {
if(-d $_[$i]) {
if(opendir($handle, $_[$i])) {
while($dir = readdir($handle)) {
if(!($dir =~ m/^\.$/) and !($dir =~ m/^(\.\.)$/)) {
push ( @filelist , "$_[$i]".'/'."$dir" ) ;
if(-d $_[$i]."\/$dir") {
$arr[$j++] = $_[$i]."\/$dir";
# print "\t[DIR]"
}
# print "\n";
}
}
closedir($handle);
}
}
}
if($j>0) {
&listdir (@arr);
}
}
sub markline {
local ( $filename , $line , $str ) = @_ ;
print "filename:$filename\tline:$line\tcontent:$str"."\n" ;
}
阅读(2236) | 评论(0) | 转发(0) |