我正試圖通過參考哈希值來操作一個檔案,但很難將密鑰傳遞給哈希值。
輸入檔案是一個簡單的 CSV,
ATFTP1-a, brah, brah2,
ATFTP1-J, brah, brah2,
ATFTP1-m, brah, brah2。
我想在第二列插入一個元素。這個元素應該是一個哈希值,它與第一個元素作為一個鍵相匹配。
my %Ctct2Bob = (
"ATFTP1-a"/span> => "24"/span> ,
"ATFTP1-b" => "25" 。
"ATFTP1-j" => "100" 。
"ATFTP1-m" => "33" 。
)
while( my $line = <IN> ){
my @linestuff = split(',', $line);
print "@linestuff[0]," ;
my $key = $linestuff[0] 。
print $Ctct2Bob{$key};
...
print "
"。
我想要的是
ATFTP1-a,24, brah, brah2,
ATFTP1-J,100, brah, brah2,
ATFTP1-m,33, brah, brah2。
對于我來說,我不能列印這個值。不過我可以列印元素$Ctct2Bob{'ATFTP1-a'}。
uj5u.com熱心網友回復:
你可以使用splice來插入到一個串列的中間:
#!/usr/bin/env perl。
use strict;
使用警告。
use feature qw/say/;
my %Ctct2Bob = (
"ATFTP1-a"/span> => "24"/span> ,
"ATFTP1-b" => "25" 。
"ATFTP1-j" => "100" 。
"ATFTP1-m" => "33" 。
);
while (my $line = <DATA> ){
chomp $line。
# 這里需要-1來保留空的尾部區域。
my @linestuff = split s*,s*/, $line, -1;
# 如果第一個陣列元素存在于哈希中,則插入其。
# 的值作為新的第二個元素,否則就是默認值。
if (exists $Ctct2Bob{$linestuff[0]}) {
# Insert before the current second element (Offset 1).
splice @linestuff, 1, 0, $Ctct2Bob{$linestuff[0]};
} else {
splice @linestuff, 1, 0, "未找到"。
}
# And print the line out.
say join(",", @linestuff) 。
}
__DATA__
ATFTP1-a, brah, brah2,
ATFTP1-J, brah, brah2,
ATFTP1-m, brah, brah2,
注意:我建議切換到
Text::CSV_XS來處理在任何嚴肅的perl程式中讀取CSV資料,盡管對于像你的樣本這樣的簡單資料,split在逗號上可以起到作用。
uj5u.com熱心網友回復:
一個簡單的split和re-shuffle的陣列就可以做到這一點。
注意:假設在%Ctct2Bob中的hash而不是"ATFTP1-j" => "100" ,應該是"ATFTP1-J" => "100" ,--基于期望的輸出
span class="hljs-keyword">use strict;
use warnings;
use feature 'say';
my %Ctct2Bob = (
"ATFTP1-a" => "24" ,
"ATFTP1-b" => "25" 。
"ATFTP1-J" => "100" 。
"ATFTP1-m" => "33" 。
);
while( < DATA> ){
chomp;
my($key,@data) = split ', ';
@data = $Ctct2Bob{$key}? ? ($key,$Ctct2Bob{$key},@data) : ($key,@data)。
say join(', ',@data);
}
exit 0;
__DATA__
ATFTP1-a, brah, brah2,
ATFTP1-J, brah, brah2,
ATFTP1-m, brah, brah2,
輸出
ATFTP1-a,24, brah, brah2
ATFTP1-J,100, brah, brah2
ATFTP1-m,33, brah, brah2
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/310452.html
標籤:
上一篇:安卓11存盤訪問和Java檔案庫
