使用Perl从文件中获取数据
我的档案如下:使用Perl从文件中获取数据,perl,Perl,我的档案如下: <country=HK> TCN=1 CURR_TYPE="RS" PRICE=10 COMP_NAME="IBM" TCN=2 CURR_TYPE="RS" PRICE=200 COMP_NAME="CTS" TCN=3 CURR_TYPE="RS" PRICE=50 COMP_NAME="TCS" endHK <country=JN>
<country=HK>
TCN=1
CURR_TYPE="RS"
PRICE=10
COMP_NAME="IBM"
TCN=2
CURR_TYPE="RS"
PRICE=200
COMP_NAME="CTS"
TCN=3
CURR_TYPE="RS"
PRICE=50
COMP_NAME="TCS"
endHK
<country=JN>
TCN=1
CURR_TYPE="YEN"
PRICE=10
COMP_NAME="IBM"
TCN=2
CURR_TYPE="YEN"
PRICE=200
COMP_NAME="CTS"
TCN=3
CURR_TYPE="YEN"
PRICE=50
COMP_NAME="TCS"
</country=JN>
TCN=1
CURR_TYPE=“RS”
价格=10
COMP_NAME=“IBM”
TCN=2
CURR_TYPE=“RS”
价格=200
COMP_NAME=“CTS”
TCN=3
CURR_TYPE=“RS”
价格=50
COMP_NAME=“TCS”
endHK
TCN=1
CURR_TYPE=“日元”
价格=10
COMP_NAME=“IBM”
TCN=2
CURR_TYPE=“日元”
价格=200
COMP_NAME=“CTS”
TCN=3
CURR_TYPE=“日元”
价格=50
COMP_NAME=“TCS”
现在,我想使用Perl脚本从上述文件中的成员检索值
我的Perl脚本文件是:
#!perl
open(FH, "<a.txt");
@a=<FH>;
$b=$#a;
for ($n=0;$n<$b;$n++)
{
if ($a[$n]=~/HK/)
{
foreach $_ ( @a[$n..($n+300)])
{
if($_ =~ /endHK/){ exit 0;}
print $_;
}
}
}
close(FH);
#!perl
open(FH),虽然粘贴的代码使用两个不同的结束标记…(endHK
和
),但该文件看起来不难解析。解析简单数据的基本方法可能如下所示:
检索文件:
use autodie;
open(FILE, '<', 'file.txt');
my @data = <FILE>;
close(FILE);
删除不必要的字符:
chomp $line;
$line =~ s/^\s+|\s+$//g;
next unless $line;
并建立一些数据结构:
if($line =~ m!^<country=([^>]+)>!) {
$country = $1;
}
elsif($line =~ m!^([^<=]+)=(.+)$!) {
my ($key, $value) = ($1, $2);
$value =~ s/"//g;
$file{$country}->{$key} = $value;
}
这应该打印如下内容:
$VAR1 = {
'HK' => {
'PRICE' => '50',
'CURR_TYPE' => 'RS',
'COMP_NAME' => 'TCS',
'TCN' => '3'
},
'JN' => {
'PRICE' => '50',
'CURR_TYPE' => 'YEN',
'COMP_NAME' => 'TCS',
'TCN' => '3'
}
};
另外:请看。此模块提供了一种“更安全”的处理此类数据的方法。您自己做过任何尝试吗?@AvinashGopal将您编写的脚本添加到问题正文中。此外,您是否有两种用于国家的“结束分隔符”
?(即endCOUNTRY,)?我会对你的问题进行编辑,使其以一种格式良好的方式包含代码。如果你明确表示自己尝试过这项任务,你通常会得到更多的回答,即使代码不起作用。
print Dumper \%file;
$VAR1 = {
'HK' => {
'PRICE' => '50',
'CURR_TYPE' => 'RS',
'COMP_NAME' => 'TCS',
'TCN' => '3'
},
'JN' => {
'PRICE' => '50',
'CURR_TYPE' => 'YEN',
'COMP_NAME' => 'TCS',
'TCN' => '3'
}
};