program qsort use M_io, only : fileread use M_CLI2, only : set_args, lget , files=>unnamed use M_strings, only : upper, notabs, transliterate use M_sort, only : sort_quick_rx implicit none ! ident_1="@(#) sort lines in a file" character(len=1024) :: message character(len=:),allocatable :: pageout(:), pageleft(:), help_text(:), version_text(:), makeblank,line integer,allocatable :: ii(:) integer :: i, j, k, ilen, ios call setup() call set_args('',help_text,version_text) ! crack command line makeblank='' do i=0,127 select case(i) case(0:64,91:96,123:127) makeblank=makeblank//achar(i) end select enddo do i=1,size(files) ! for each file read and reverse lines call fileread(files(i),pageout) ! allocate character array and copy file into it if(.not.allocated(pageout))then write(*,*)'*qsort* failed to load file '//files(i) else allocate(ii(size(pageout))) allocate(character(len=(len(pageout))) :: pageleft(size(pageout))) do k=1,size(pageout) call notabs(pageout(k),pageleft(k),ilen) !pageleft(k)=transliterate(adjustl(upper(pageleft(k))),makeblank,' ') line=transliterate(pageleft(k),makeblank,' ') pageleft(k)=upper(adjustl(line)) enddo call sort_quick_rx(pageleft,ii) write(*,'(a)')(trim(pageout(ii(j))),j=1,size(ii)) !write(*,'(a)')(trim(pageleft(ii(j))),j=1,size(ii)) deallocate(ii,pageleft,pageout) endif enddo contains subroutine setup() help_text=[ CHARACTER(LEN=128) :: & 'NAME',& ' qsort(1f) - [FUNIX] sort a file',& ' (LICENSE:PD) ',& ' ',& 'SYNOPSIS ',& ' qsort INPUT_FILE(S) [ --help][ --version]',& ' ',& 'DESCRIPTION ',& ' Sort lines in a file by reading into memory and sorting',& ' alphabetically. Case and non-alphanumeric characters are ignored.',& ' ',& ' This is a simple use of the M_sort(3f) module and reads the files',& ' into memory, which could cause a machine to run out of memory if ',& ' input files are large. ',& ' ',& 'OPTIONS ',& ' INPUT_FILE(s) input file(s) ',& ' --help display help text and exit ',& ' --version display version information and exit ',& ' ',& 'AUTHOR ',& ' John S. Urban ',& ' ',& 'LICENSE ',& ' Public Domain ',& ''] version_text=[ CHARACTER(LEN=128) :: & 'PRODUCT: GPF (General Purpose Fortran) utilities and examples',& 'PROGRAM: qsort(1f) ',& 'DESCRIPTION: sort lines in a file ',& 'VERSION: 1.0, 2021-01-10 ',& 'AUTHOR: John S. Urban ',& 'HOME PAGE: http://www.urbanjost.altervista.org/index.html ',& ''] end subroutine setup end program qsort