这里我写了Perl代码,但在if条件下,使用\n
新行字符不匹配。
#!/usr/bin/perl
use strict;
#use warnings;
use Cwd;
use File::Basename;
use File::Copy;
my $path = getcwd;
#print $path."\n";
opendir( INP, "$path\/" );
my @out = grep( /.(xml)$/, readdir(INP) );
close INP;
#print @out;
open( F6, ">Log.txt" );
foreach my $f1 (@out) {
open( FF, "<$path\/$f1" ) or die "Cannot open file: $out[0]";
my $data1 = join( "", <FF> );
my @FILE_KA_ARRAY = split( /\n/, $data1 );
my $file_ka_len = @FILE_KA_ARRAY;
#print F6 $file_ka_len."\n";
#print F6 $f."\t".$file_ka_len."\n";
print F6 $f1 . "\n";
for ( my $x = 1; $x < $file_ka_len; $x++ ) {
my $y = $x + 1;
my $temp_file_arr = "";
$temp_file_arr = $FILE_KA_ARRAY[$x];
#print F6 $temp_file_arr."\t$x\n";
my $temp1 = $temp_file_arr;
if ( $temp1
=~ m#(<list .*? depth="(\d+)">)\n?(<list .*? depth="(\d+)">)#gs )
{
my $list3 = $1;
print F6 "\t\t\t\t\t\t\t\t" . $y . "\t\t" . $list3 . "\n";
}
}
}
答案 0 :(得分:3)
假设你的问题是:
if($temp1=~m#(<list .*? depth="(\d+)">)\n?(<list .*? depth="(\d+)">)#gs)
然后问题在这里:
my @FILE_KA_ARRAY = split(/\n/, $data1);
因为您的拆分正在移除换行符并将每一行放入数组中。所以当你这样做时:
$temp_file_arr = $FILE_KA_ARRAY[$x];
my $temp1=$temp_file_arr;
您没有换行,因为您的来源中没有换行符。
另外:
warnings
。如果您有警告修复他们。 XML
。使用解析器。 (虽然我避免XML::Simple
- it's nasty)glob ( "$path/*.xml" )
代替readdir
和grep
,则会获得内置路径列表。