NAME Sort::Array - This extended sorting algorithm allows you to a) 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' is empty or not set or contains wrong content. '101' is emtpy or not set or contains wrong content. '102' is empty or contains not 'ascending' or 'descending'. '103' is empty or contains not 'csv' or 'single'. '104' 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 = ( '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 => 'csv', separator => '\*', data => \@data, ); Returns an array (with CSV-Lines): 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 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 - 2001-08-25 / 0.26 File permission fixed, now anybody can extract the archive, not only the user 'root'. - 2001-08-23 / 0.25 Changed the Discard_Duplicates() function to discard duplicates and only sort the array if wished. You can set to 'asending', 'desending' or let them empty to disable sorting. Some misspelling corrected. - 2001-08-17 / 0.24 Error codes are no longer returned in an array (that array that contains the sorted Data). $Sort::Array::error is used with the code instead. - 2001-07-28 / 0.23 First beta-release, non-public AUTHOR Michael Diekmann, THANKS Rainer Luedtke, COPYRIGHT Copyright (c) 2001 Michael Diekmann . 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).