NAME

Sort::Array - This extended sorting algorithm allows you to

  1. sort an array by ANY field number, not only the first. b) find duplicates in your data-set and sort them out.

The function is case-sensitive. Future versions might come without this limitation.

SYNOPSIS

      use Sort::Array qw(
          Sort_Table
          Discard_Duplicates
      );
      @data = Sort_Table(
          cols      => '4',
          field     => '4',
          sorting   => 'descending',
          structure => 'csv',
          separator => '\*',
          data      => \@data,
      );
      @languages = Discard_Duplicates(
          sorting      => 'ascending',
          empty_fields => 'delete',
          data         => \@languages,
      );

DESCRIPTION

Sort_Table() is capable of sorting table-form arrays by a particular value.

Discard_Duplicates() discards doubles from an array and returns the sorted array.

Usage

      @data = Sort_Table(
          cols      => '4',
          field     => '4',
          sorting   => 'descending',
          structure => 'csv',
          separator => '\*',
          data      => \@data,
      );

      @languages = Discard_Duplicates(
          sorting      => 'ascending',
          empty_fields => 'delete',
          data         => \@languages,
      );

cols

      How many columns in a line. Integer beginning at
      1 (not 0) (for better readability).
      e.g.: '4' = Four fields at one line. ($array[0..3])
      - Utilizable only in Sort_Table()
      - Must be declared

field

      Which column should be used for sorting. Integer
      beginning at 1 (not 0).
      e.g.: '4' = Sorting the fourth field. ($array[3])
      - Utilizable only in Sort_Table()
      - Must be declared

sorting

      In which order should be sorted.
      e.g.: 'ascending' or 'descending'
      - Utilizable in Sort_Table()
      - Must be declared

      - Utilizable in Discard_Duplicates()
      - Can be declared (if empty, it does not sort the array)

empty_fields

      Should empty fields removed
      e.g.: 'delete' or not specified
      - Utilizable only in Discard_Duplicates()
      - Can be declared

structure

      Structure of that Array.
      e.g.: 'csv' or 'single'
      - Utilizable only in Sort_Table()
      - Must be declared

separator

      Which separator should be used? Only needed when
      structure => 'csv' is set. If left empty default
      is ";".
      For ?+{} as a separator you must mask it since
      it is a RegEx.
      e.g.: \? or \ ...
      - Utilizable only in Sort_Table()
      - Must be declared when using 'csv' or ';'
          will be used.

data

      Reference to the array that should be sorted.
      - Utilizable in Sort_Table() and Discard_Duplicates()
      - Must be declared

If everything went right, Sort_Table() returns an array containing your sorted Array. The structure from the imput-array is kept although it's sorted. ;)

Returncodes

If an error occurs, than will be returned an undefinied array and set $Sort::Array::error with one of the following code. Normally $Sort::Array::error is 0.

The following codes are returned, if an error occurs:

'100'
<cols> is empty or not set or contains wrong content.

'101'
<field> is emtpy or not set or contains wrong content.

'102'
<sorting> is empty or contains not 'ascending' or 'descending'.

'103'
<structure> is empty or contains not 'csv' or 'single'.

'104'
<data> is empty (your reference array).

EXAMPLES

Here are some short samples. These should help you getting used to Sort::Array

Sorting CSV-Lines in an array

      my @data = (
         '00003layout-3199908030.30',
         '00002layout-2199908020.20',
         '00004layout-4199908040.40',
         '00001layout-1199908010.10',
         '00005layout-5199908050.50',
         '00007layout-7199908070.70',
         '00006layout-619990806*0.60',
      );

      @data = Sort_Table(
          cols      => '4',
          field     => '4',
          sorting   => 'descending',
          structure => 'csv',
          separator => '\*',
          data      => \@data,
      );

      Returns an array (with CSV-Lines):

      00007layout-7199908070.70
      00006layout-6199908060.60
      00005layout-5199908050.50
      00004layout-4199908040.40
      00003layout-3199908030.30
      00002layout-2199908020.20
      00001layout-119990801*0.10

Sorting single-fields in an array

      my @data = (
         '00003', 'layout-3', '19990803', '0.30',
         '00002', 'layout-2', '19990802', '0.20',
         '00004', 'layout-4', '19990804', '0.40',
         '00001', 'layout-1', '19990801', '0.10',
         '00005', 'layout-5', '19990805', '0.50',
         '00007', 'layout-7', '19990807', '0.70',
         '00006', 'layout-6', '19990806', '0.60',
      );

      @data = Sort_Table(
          cols      => '4',
          field     => '4',
          sorting   => 'descending',
          structure => 'single',
          data      => \@data,
      );

      Returns an array (with single fields)

      00007 layout-7 19990807 0.70
      00006 layout-6 19990806 0.60
      00005 layout-5 19990805 0.50
      00004 layout-4 19990804 0.40
      00003 layout-3 19990803 0.30
      00002 layout-2 19990802 0.20
      00001 layout-1 19990801 0.10

Discard duplicates in an array:

      my @languages = (
          '',
          'German',
          'Dutch',
          'English',
          'Spanish',
          '',
          'German',
          'Spanish',
          'English',
          'Dutch',
      );

      @languages = Discard_Duplicates(
          sorting      => 'ascending',
          empty_fields => 'delete',
          data         => \@languages,
      );

      Returns an array (with single fields):

      Dutch
      English
      German
      Spanish

BUGS

No Bugs known for now. ;)

HISTORY

Some misspelling corrected.

AUTHOR

Michael Diekmann, <michael.diekmann@undef.de>

THANKS

Rainer Luedtke, <sirbedivere@freshfish.de>

COPYRIGHT

Copyright (c) 2001 Michael Diekmann <michael.diekmann@undef.de>. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

perl(1).