<?xml version="1.0" encoding="windows-1252"?>
<node id="1014365" title="Re: Detect file sequences in File:Find results" created="2013-01-20 20:01:03" updated="2013-01-20 20:01:03">
<type id="11">
note</type>
<author id="832495">
choroba</author>
<data>
<field name="doctext">
What does the &lt;c&gt;preprocess&lt;/c&gt; sub do? This is my solution without it:&lt;c&gt;
#!/usr/bin/perl
use warnings;
use strict;

use File::Find;
use File::stat;

my $dir = shift;
my %result;

find ( {'wanted' =&gt; sub {
            my $file = $File::Find::name;
            my ($n, $fn) = (getpwuid (stat($file)-&gt; uid))[0, 6];
            if (-f &amp;&amp; (/^[^.]/) ) {
                if( my ($pre, $num, $suff) = $file =~ /(.*)\.([0-9]+)\.(.*)/ ) {
                    push @{ $result{$pre}{$suff}{"$n:$fn"} }, $num;
                }
            }
        },
       },
       $dir);

for my $pre (keys %result) {
    for my $suff (keys %{ $result{$pre} }) {
        for my $user (keys %{ $result{$pre}{$suff} }) {
            my @nums = sort { $a &lt;=&gt; $b } @{ $result{$pre}{$suff}{$user} };

            my $first = shift @nums;
            my ($from, $to, @ranges) = ($first, $first);

            for (@nums) {
                if ($_ == $to + 1) {
                    $to = $_;
                } else {
                    push @ranges, [$from, $to];
                    ($from, $to) = ($_, $_);
                }
            }
            push @ranges, [$from, $to];

            for my $r (@ranges) {
                print "$pre." 
                      . ($r-&gt;[0] == $r-&gt;[1] ? $r-&gt;[0]
                                            : "[$r-&gt;[0]-$r-&gt;[1]]")
                      . ".$suff:$user\n";
            }
        }
    }
}
&lt;/c&gt;
&lt;!-- Node text goes above. Div tags should contain sig only --&gt;
&lt;div class="pmsig"&gt;&lt;div class="pmsig-832495"&gt;

&amp;#1604;&amp;#1405;&amp;#4285;† &amp;#6514;&amp;#6482;&amp;#9898;&amp;#10186;&amp;#4281;&amp;#5651;&amp;#5511; &amp;#5045;&amp;#5651;&amp;#5511;&amp;#9137; &amp;#4281;&amp;#6514;&amp;#119243;&amp;#409;&amp;#5651;&amp;#5511;
&lt;/div&gt;&lt;/div&gt;</field>
<field name="root_node">
1014360</field>
<field name="parent_node">
1014360</field>
</data>
</node>
