gpt4 book ai didi

perl - 使用 Perl 从文本文件中提取和打印键值对

转载 作者:行者123 更新时间:2023-12-03 18:18:04 25 4
gpt4 key购买 nike

我有一个文本文件 temp.txt,其中包含类似的条目,

cinterim=3534
cstart=517
cstop=622
ointerim=47
ostart=19
ostop=20

注意:键值对可以换一行排列,也可以一次排列在一行中,以空格分隔。

我正在尝试使用 Perl 将这些值打印并存储在 DB 中以获取相应的键。但是我收到了很多错误和警告。现在我只是想打印这些值。
use strict;
use warnings;

open(FILE,"/root/temp.txt") or die "Unable to open file:$!\n";

while (my $line = <FILE>) {
# optional whitespace, KEY, optional whitespace, required ':',
# optional whitespace, VALUE, required whitespace, required '.'
$line =~ m/^\s*(\S+)\s*:\s*(.*)\s+\./;
my @pairs = split(/\s+/,$line);
my %hash = map { split(/=/, $_, 2) } @pairs;

printf "%s,%s,%s\n", $hash{cinterim}, $hash{cstart}, $hash{cstop};

}
close(FILE);

有人可以提供帮助来改进我的程序。

最佳答案

use strict;
use warnings;

open my $fh, '<', '/root/temp.txt' or die "Unable to open file:$!\n";
my %hash = map { split /=|\s+/; } <$fh>;
close $fh;
print "$_ => $hash{$_}\n" for keys %hash;

这段代码的作用:
<$fh>从我们的文件中读取一行,或在列表上下文中,所有行并将它们作为数组返回。

map我们使用正则表达式 /= | \s+/x 将我们的行拆分为一个数组.这意味着:当您看到 = 时拆分或一系列空白字符。这只是原始代码的浓缩和美化形式。

然后,我们转换由 map 产生的列表到 hash类型。我们可以这样做,因为列表的项目数是偶数。 (像 key key=valuekey=value=value 这样的输入此时会抛出错误)。

之后,我们将哈希值打印出来。在 Perl 中,我们可以直接在字符串中插入哈希值,而不必使用 printf和 friend 除了特殊格式。
for循环遍历所有键(在 $_ 特殊变量中返回)和 $hash{$_}是对应的值。这也可以写成
while (my ($key, $val) = each %hash) {
print "$key => $val\n";
}

哪里 each迭代所有键值对。

关于perl - 使用 Perl 从文本文件中提取和打印键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11844679/

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