网址: 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
: 有想到将所有的流水号之代码塞到阵列中,阵列以流水号命名
: 然后比对所需的代码,但是目前没什么头绪
: 不晓得有哪位朋友可以指教的呢?
: 感谢~