如何将具有多个记录的文件放入perl中的数组中

时间:2011-07-18 04:34:56

标签: arrays perl file

  

可能重复:
  how to put a file into an array and save it in perl

我是perl的初学者,我想将带有记录的文件放入从AA到/或每个数组元素的数组中。所以任何人都可以帮助我。

我的INPUT FILE是这样的:

\

AA c0001

BB afsfjgfjgjgjflffbg

CC表

DD hhhfsegsksgk

EB jksgksjs \

AA e0002

BB rejwkghewhgsejkhrj

CC主席

DD egrhjrhojohkhkhrkfs

VB rkgjehkrkhkh; r

\

这是一个txt文件格式所以,从这个文件我应该收集所有从AA开始的信息到\为'table'这样的东西在ist记录中也有'chair'在第二个记录,我需要收集所有'CC table'和'CC chair'的记录,因为它们随机排列在整个文件中,还有大约数百条记录,我需要收集这些桌子和椅子。所以我想把我的文件放到一个数组中,首先让它的每个元素从AA到。有没有其他想法做这件事。有人可以帮我编写制作数组的代码。我将非常感谢。

1 个答案:

答案 0 :(得分:1)

当您寻找特定的字符串时,正则表达式是您最好的选择。正则表达式是告诉Perl您正在寻找什么类型的字符串的简短方法。它还允许您捕获字符串的一部分,以便您以后不必提取它们。

您的案例很复杂,因为您的记录跨越多行,但正则表达式可以处理而不是使用\m选项。它使^$匹配行首和行尾,而不是字符串开头和字符串结尾。这意味着你可以说

my ($type) = $record =~ /^CC (.+)/m;

^匹配行的开头,C匹配文字C,空格与文字空间匹配,括号与任何内容不匹配(它们启动捕获组),{ {1}}匹配除换行符之外的任何字符,.表示匹配表示匹配上述内容中的一个或多个(即+)。

此正则表达式由.运算符应用于$record中的字符串。

列表上下文中的匹配返回其捕获组,因此通过将=~放在括号中,我们使匹配将捕获组返回到$type变量。一旦我们可以访问记录的类型,一个简单的if语句允许我们按照您的意愿过滤记录:

$type

如果您使用的是Perl 5.10或更高版本且启用了feature pragma,则可以使用if ($type eq "chair") { #do chair stuff } elsif ($type eq "table") { #do table stuff } else { die "I don't know what to do with '$type'"; } / given语法,这对于这种逻辑来说更好:

when

您可以在perldoc perlretutperldoc perlre

中详细了解正则表达式