Perl:根据空行拆分文件进行处理
Posted
技术标签:
【中文标题】Perl:根据空行拆分文件进行处理【英文标题】:Perl: Split file based on blank lines for processing 【发布时间】:2014-02-04 13:49:28 【问题描述】:我有一个具有常规模式的数据文件,我需要从中提取信息。 每个部分由一个空行分隔。 因此,我想知道是否可以根据空行拆分文件进行处理。
为了更好地解释我的问题,让我分享示例结构:
Block: A1
-----------------------------------
Height: 24.00
Width: 0.79
Depth: 0.04
-----------------------------------
Block: A2
-----------------------------------
Height: 20.00
Width: 1.00
Depth: 0.54
-----------------------------------
Block: B1
-----------------------------------
Height: 4.00
Width: 4.50
Depth: 0.87
-----------------------------------
在这个数据库中,我需要通过创建多个列来简化报告。 我试图实现的算法是,如果我可以根据空行将文件拆分为更小的部分,我可以将数据库读入二维数组,最后将数据转储为我选择的格式。 因此,第一个要求是了解我是否可以根据空行拆分文件以进行进一步处理。
我预期的最终结果是
A1 A2 B1
Height: 24.00 20.00 4.00
Width: 1.00 4.00 4.50
Depth: 0.04 0.54 0.87
任何建议/线索将不胜感激。
【问题讨论】:
【参考方案1】:使用“段落模式”可以很容易地分割文件以进行基于空白行的处理。
local $/ = "";
while (my $block = <>)
...
但不这样做更容易。
my $block;
my $data;
while (<>)
if (/^Block:\s*(\S+)/)
$block = $1;
elsif (/^(\S+):\s*(\S+)/)
$data$1$block = $2;
【讨论】:
【参考方案2】:while(<>)
push @B,$1 if(/Block:\s*(\S*)/);
push @H,$1 if(/Height:\s*(\S*)/);
push @W,$1 if(/Width:\s*(\S*)/);
push @D,$1 if(/Depth:\s*(\S*)/);
print "\t\t @B \n";
print "Height @H \n";
print "Width @W \n";
print "Depth @D \n";
测试Here
【讨论】:
以上是关于Perl:根据空行拆分文件进行处理的主要内容,如果未能解决你的问题,请参考以下文章