Regex 在Perl中解析文件并在数组中存储分隔的部分
我需要处理外部数据,一个纯文本文件,其中包含要用Perl处理的数据(我正在学习这种语言) 如何读取此文件并将每个节存储在数组中(节是已知的,并在Regex 在Perl中解析文件并在数组中存储分隔的部分,regex,arrays,perl,parsing,Regex,Arrays,Perl,Parsing,我需要处理外部数据,一个纯文本文件,其中包含要用Perl处理的数据(我正在学习这种语言) 如何读取此文件并将每个节存储在数组中(节是已知的,并在{xxxx}和{xxxx END}之间进行分隔)。节中的每个数据都转换为列表并存储在数组中。 我希望有这样的东西,例如: @name = ( ("orga","21","12348","organisation"), ("serv","22","12348","service") ) 像这样的怎么样: my %list; while(<DATA&
{xxxx}
和{xxxx END}
之间进行分隔)。节中的每个数据都转换为列表并存储在数组中。
我希望有这样的东西,例如:
@name = ( ("orga","21","12348","organisation"), ("serv","22","12348","service") )
像这样的怎么样:
my %list;
while(<DATA>) {
chomp;
if (/^\{(.*?)\}/ .. /^\{${1}-END\}/) {
push @{$list{$1}}, $_ unless /^\{/;
}
}
say Dumper\%list;
像这样的怎么样:
my %list;
while(<DATA>) {
chomp;
if (/^\{(.*?)\}/ .. /^\{${1}-END\}/) {
push @{$list{$1}}, $_ unless /^\{/;
}
}
say Dumper\%list;
尝试创建根据其他变量的值命名的变量是一个坏主意。最好的方法是构建数组散列,而不是像
@name
那样分离命名数组
类似于这个程序的东西可以满足您的需要。我曾经显示过程序构建的数据结构
use strict;
use warnings;
use Data::Dump;
open my $fh, '<', 'data.txt' or die $!;
my %data;
my $sect;
while (<$fh>) {
chomp;
if (/^\{(\w+)\}$/) {
$sect = $1;
}
elsif (/^\{($sect-END)\}$/) {
undef $sect
}
elsif (defined $sect) {
push @{ $data{$sect} }, [split /:/];
}
}
dd \%data;
尝试创建根据其他变量的值命名的变量是一个坏主意。最好的方法是构建数组散列,而不是像
@name
那样分离命名数组
类似于这个程序的东西可以满足您的需要。我曾经显示过程序构建的数据结构
use strict;
use warnings;
use Data::Dump;
open my $fh, '<', 'data.txt' or die $!;
my %data;
my $sect;
while (<$fh>) {
chomp;
if (/^\{(\w+)\}$/) {
$sect = $1;
}
elsif (/^\{($sect-END)\}$/) {
undef $sect
}
elsif (defined $sect) {
push @{ $data{$sect} }, [split /:/];
}
}
dd \%data;
我认为你应该展示一个完整的工作程序,尤其是对于学习该语言的人。我认为遗漏
use
语句没有任何好处。我认为你应该展示一个完整的工作程序,尤其是对于学习该语言的人。我认为遗漏use
语句没有任何好处。谢谢你非常感谢你,这正是我所需要的!
{
DATA => [
["palm", "data", "fluid", 147],
["rose", "data", "fluid", 149],
],
NAME => [
["orga", 21, 12348, "oragnisation"],
["serv", 22, 12348, "service"],
],
OTHER => [
["palm", "data", "fluid", 147],
["rose", "data", "fluid", 149],
["germ", "data", "fluid", 189],
],
}