我有两个非常大的 XML 文件,它们具有不同类型的行尾。文件 A 在每个 XML 记录的末尾都有 CR LF。文件 B 在每个 XML 记录的末尾只有 CR。
为了正确读取文件 B,我需要将内置 Perl 变量 $/ 设置为“\r”。但是,如果我对文件 A 使用相同的脚本,则该脚本不会读取文件中的每一行,而是将其作为单行读取。
如何使脚本与具有各种行尾分隔符的文本文件兼容?在下面的代码中,脚本正在读取 XML 数据,然后使用正则表达式根据特定的 XML 标记记录结束标记(如 <\record>)拆分记录。最后,它将请求的记录写入文件。
open my $file_handle, '+<', $inputFile or die $!;
local $/ = "\r";
while(my $line = <$file_handle>) { #read file line-by-line. Does not load whole file into memory.
$current_line = $line;
if ($spliceAmount > $recordCounter) { #if the splice amount hasn't been reached yet
push (@setofRecords,$current_line); #start adding each line to the set of records array
if ($current_line =~ m|$recordSeparator|) { #check for the node to splice on
$recordCounter ++; #if the record separator was found (end of that record) then increment the record counter
}
}
#don't close the file because we need to read the last line
}
$current_line =~/(\<\/\w+\>$)/;
$endTag = $1;
print "\n\n";
print "End Tag: $endTag \n\n";
close $file_handle;