gpt4 book ai didi

perl - 在 Perl 中解析垂直分隔的文件

转载 作者:行者123 更新时间:2023-12-01 15:51:50 25 4
gpt4 key购买 nike

我有一个看起来像这样的文件:

*NEWRECORD
RECTYPE = D
MH = Calcimycin
AQ = AA
MED = *62

*NEWRECORD
RECTYPE = D
MH = Urinary Bladder
AQ = AB AH BS CH CY DE EM EN GD IM IN IR ME MI PA PH PP PS RA RE RI SE SU TR UL US VI
CX = consider also terms at CYST- and VESIC-
MED = *1359

每个记录 block 都有不同的行数(例如,CX 条目并不总是存在)。但如果 CX 存在,则仅显示为 1 个条目。我们想得到一个以“MH”为键,以“CX”为值的哈希。

因此解析上述数据我们希望得到这样的结构:

$VAR = {  "Urinary Bladder" => ["CYST-" , "VESIC-"]};

解析它的正确方法是什么?

我受困于此,它没有给我想要的结果。

use Data::Dumper;
my %bighash;
my $key = "";
my $cx = "";
while (<>) {

chomp;

if (/^MH = (\w+/)) {

$key = $1;
push @{$bighash{$key}}, " ";
}
elsif ( /^CX = (\w+/)) {
$cx = $1;

}
else {
push @{$bighash{$key}}, $cx;

}

}

最佳答案

如果您使用$/ 一次读取一段数据,这会变得更简单。令我惊讶的是,没有其他人这样建议。

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

use Data::Dumper;

my %bighash;

$/ = '';

while (<DATA>) {
if (my ($k) = /^MH = (.*?)$/m and my ($v) = /^CX = (.*?)$/m) {
$bighash{$k} = [ $v =~ /([A-Z]+-)/g ];
}
}

say Dumper \%bighash;

__DATA__
*NEWRECORD
RECTYPE = D
MH = Calcimycin
AQ = AA
MED = *62

*NEWRECORD
RECTYPE = D
MH = Urinary Bladder
AQ = AB AH BS CH CY DE EM EN GD IM IN IR ME MI PA PH PP PS RA RE RI SE SU TR UL US VI
CX = consider also terms at CYST- and VESIC-
MED = *1359

输出看起来像这样:

$VAR1 = {
'Urinary Bladder' => [
'CYST-',
'VESIC-'
]
};

关于perl - 在 Perl 中解析垂直分隔的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8164291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com