在两个特定值之间拆分文件,并将其放在perl中的数组中

时间:2014-10-17 11:33:35

标签: perl file text split

示例文件:

### Current GPS Coordinates ###
Just In ... : unknown


### Power Source ###
 2

### TPM Status ###
 0

### Boot Version ###
GD35 1.1.0.12 - built 14:22:56, Jul 10 232323

我希望将以上文件拆分为以下数组:

@Current0_PS_Coordinates应如下所示

### Current GPS Coordinates ###
Just In ... : unknown

我喜欢在Perl中做任何帮助吗? (当前节目从评论中添加)

#!/usr/local/lib/perl/5.14.2 -w
my @lines;
my $file;
my $lines;
my $i;
#chomp $i;
$file = 'test.txt'; # Name the file 
open(INFO, $file); # Open the file
@lines = <INFO>; # Read it into an array 
close(INFO); # Close the file
foreach my $line (@lines) { print "$line"; }

2 个答案:

答案 0 :(得分:0)

逐行读取文件。使用chomp删除尾随换行符

如果输入行与此正则表达式/^### (.*) ###/匹配,那么您的名称为&#34;数组&#34; 1美元

可以从这些匹配中创建像@ Current0_PS_Coordinates这样的命名变量。

但最好将它们用作哈希键,然后将数据存储在具有数组值的哈希中

所以将比赛中的1美元放入&#34; $ lastmatch&#34;并启动一个由此$items{$lastmatch}=[]之类的哈希引用的空数组,并再读一些

如果输入行与&#34;数组的名称不匹配&#34;上面给出的regexp,如果它不是空的,那么我们假设它是找到的最后一个匹配的值。所以它可以填充在当前数组中,如push @$items{$lastmatch}, $line

完成此操作后,所有数据都将显示在%items hash

有关更多详细信息,请参阅perldata,perlre,perldsc和perllol文档页面

答案 1 :(得分:0)

一个好的开始就是购买Learning Perl(O&#39; Reilly)这本书。说真的,这是一本很棒的书,每章结尾都有有趣的练习。很容易学习。

1)。为什么你有&#34;我的@ lines&#34;然后&#34;我的$ lines&#34;降下来?我甚至不认为您可以这样做,因为标量和数组是相同的变量,但不同的上下文。例如,@ list可以是(&#39; a&#39;,&#39; b&#39;,&#39; c&#39;)但是调用$ list会返回3,即该列表中的项目数。

2)。什么是&#34;我的$ i&#34;?即使您只是写下想法,也要尝试使用描述性名称。它可以使代码更容易组合在一起。

3)。为什么有一个被评论出来的&#34; chomp $ i&#34;?你想和那个想法一起去哪儿?

4)。尝试使用open的3参数形式。这样可以确保您不会意外销毁您正在阅读的文件:

open INFO, "<", $file;

如果你不确定从哪里开始这个问题,Vorsprung的答案可能并不意味着什么。正则表达式和$ 1之类的变量是您需要阅读书籍才能理解的内容。