求一类数列的按需提取问题

求一类数列的按需提取问题

工作中遇到下面这样一个问题,不知道该怎么写程序来提取这类数据,请大家帮个忙。感谢!


一个表中一个字段如下
“1,2,3,3g,3g1,3g2,4,5,5g,5g1,6,7,8,8g,8g1,9,10”
对应另外一个字段,两个字段对应关系如下:

1--a
2--b
3--c
3g--d
3g2--
3g3--
4--e
5--f
5g--g
5g2--h
6--i
7--j
8--
8g--
8g2--
9--k
10--l

提取的要求是,不带g的正常提取(例如:1,2,4,6....);带g的部分提取最大的一项(例如:3g2/5g1),但是要结合右面的字段,如果右面的字段为空,则提取前一个带g的,直到不为空,如果该系列都为空(8,8g,8g1),则提取第一个,也就是8.

提取的结果应该是 1,2,3g,4,5g2,6,7,8,9,10


QUOTE:
如果右面的字段为空,则提取前一个带g的,直到不为空

看不明白
哦,是这样。比如
3--c
3g--d
3g2--
3g3--

先找最大的3g3,它后面的字符为空,那就找前一个,前一个是3g2,结果3g2也是空,那就找到了3g,3g后面的是“d”,这样就把3g提取出来了。



8--
8g--
8g2--
这组的情况是,后面的字符都是空,那就提取第一个,也就是提取8.


唉,这个是有点罗嗦,循环是正着循环,里面带g的提取又是反这,弄得我有点晕。
#!/usr/bin/perl

use strict;
use warnings;

my %data;
while (<DATA>) {
        chomp;
        my @t = split /--/, $_;
        $data{$t[0]} = $t[1];
}

my @key = keys %data;

for my $p (1..10) {
        my @t;
        for (@key) {
                /(^\d+)/;
                push @t, $_ if $1 == $p;
        }
        if (@t == 1) {
                print $t[0], ', ';
        } else {
                @t = sort {$b cmp $a} @t;
                for (@t) {
                        if ($data{$_}) {
                                print $_, ', ';
                                last;
                        }
                }
        }
}

__DATA__
1--a
2--b
3--c
3g--d
3g2--
3g3--
4--e
5--f
5g--g
5g2--h
6--i
7--j
8--
8g--
8g2--
9--k
10--l

________

这个程序仅针对你已给出的数据
非常感谢楼上,我去弄一下。