Re: [問題] 陣列讀取值

作者: cutekid (可愛小孩子)   2017-09-27 10:56:40
網址: http://codepad.org/RwOexb5H
代碼:
@CODE = qw(04 70 71 972);
while(<DATA>){
#################################
# Why not chomp in codepad.org ??
#
# 推測原因:
# 底下 __DATA__ 區塊的換行由 \r\n 組成
# 真正到了運行環境下: $/ = "\n"
# 所以 chomp 沒辦法把 \r 給 remove 掉
tr/\r\n//d;
my ($sn,$code) = split(',');
push(@{$list{$sn}},$code);
}
for my $sn (sort keys %list){
my @miss;
#################################
# Perl Sets(參考 difference 部份)
# ref. https://coderwall.com/p/uawhga/perl-sets
for my $code (@CODE){
push(@miss,$code) unless grep { $code eq $_} @{$list{$sn}};
}
if(@miss){
my $miss = join(' and ',@miss);
print "$sn, missing $miss\n";
}
else{
print "$sn, no missing\n";
}
}
__DATA__
S68,71
S65,70
S66,972
S68,972
S65,71
S66,04
S68,70
S67,71
S68,04
※ 引述《yalent ( 心只有妳 )》之銘言:
: 各位大大
: 小弟有個問題想請教
: 讀取之檔案如下,第一個資料為不固定的流水號(S65~S68),第二個資料為需要的資料代碼
: 每個流水號都需要有 [04, 70, 71, 972] 這些代碼,但是有可能會缺漏
: S68,71
: S65,70
: S66,972
: S68,972
: S65,71
: S66,04
: S68,70
: S67,71
: S68,04
: 我想跟 [04, 70, 71, 972]比對,如果有缺少的,就列出缺少的部分;
: 如無缺少,就no missing
: 列出如下
: S65, missing 04 and 972
: S66, missing 70 and 71
: S67, missing 04 and 70 and 972
: S68, no missing
: 有想到將所有的流水號之代碼塞到陣列中,陣列以流水號命名
: 然後比對所需的代碼,但是目前沒什麼頭緒
: 不曉得有哪位朋友可以指教的呢?
: 感謝~
作者: yalent ( 心只有妳 )   2016-04-23 22:12:00
感謝~

Links booklink

Contact Us: admin [ a t ] ucptt.com