lur*_*ann 0 regex arrays perl parsing
我需要使用外部数据,一个纯文本文件,其中包含要在Perl中处理的数据(我正在学习这种语言).
{NAME}
orga:21:12348:oragnisation
serv:22:12348:service
{NAME-END}
{DATA}
palm:data:fluid:147
rose:data:fluid:149
{DATA-END}
{OTHER}
palm:data:fluid:147
rose:data:fluid:149
germ:data:fluid:189
{OTHER-END}
Run Code Online (Sandbox Code Playgroud)
如何读取此文件并将每个部分存储在数组中(部分已知且在{xxxx}
和之间分隔{xxxx-END}
.部分中的每个数据都转换为列表并存储在数组中.我希望有这样的内容,例如:
@name = ( ("orga","21","12348","organisation"), ("serv","22","12348","service") )
Run Code Online (Sandbox Code Playgroud)
尝试创建根据其他变量的值命名的变量是一个坏主意.最好的方法是构建数组的散列而不是单独的命名数组@name
.
像这个程序的东西会做你需要的.我曾经习惯于Data::Dump
显示程序构建的数据结构.
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;
Run Code Online (Sandbox Code Playgroud)
产量
{
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],
],
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
484 次 |
最近记录: |