uses
sysutils,strutils,process;
type
aos=array of ansistring;
type
direction =(up,down);
function filelength(filename:ansistring):longword;
Var F : File Of byte;
var L:longword;
begin
Assign (F,filename);
Reset (F);
L:=FileSize(F);
Close (F);
exit(L);
end;
procedure savefile(s:ansistring ;filename:ansistring);
var
fout:file;
begin
Assign(fout,filename);
Rewrite(fout,length(s));
blockwrite(fout,s[1],1);
close(fout);
end;
procedure loadfile(var content: ansistring;filename:ansistring);
Var Fin : File;
Var x:longint;
begin
x:=filelength(filename);
setlength(content,x);
Assign (Fin,filename);
Reset (Fin,x);
BlockRead (Fin,content[1],1);
close(fin);
end;
function sort(s:array of ansistring;d:direction):aos;
var
cd,cmd,t:ansistring;
s2:ansistring='';
res:array of ansistring=nil;
j:int32;
tot:ansistring='';
delim:ansistring=chr(13)+chr(10);
begin
t:='';
cd:=getcurrentdir;
for j:= low(s) to high(s) do tot:=tot+s[j]+delim;//chr(13)+chr(10);
savefile(tot,cd+'\templist.txt');
if (d=down) then
cmd:= 'SORT.exe /r '+ cd + '\templist.txt /o ' +cd +'\result.txt'
else
cmd:= 'SORT.exe ' + cd + '\templist.txt /o ' +cd +'\result.txt' ;
runcommand (cmd,t);
loadfile(s2,cd+'\result.txt');
res:=s2.split(delim);
DeleteFile(cd+'\templist.txt');
DeleteFile(cd+'\result.txt');
exit(res);
end;
//------------------------//
function dir(path:ansistring;flag:ansistring):ansistring;
var ans:ansistring=' ';
begin
RunCommand('c:\windows\system32\cmd.exe', ['/c', 'dir /'+flag+' '+path], ans);
exit(ans);
end;
procedure CreateAmixedString(var a:aos;maxlen:int32);
function range(f:integer;l:integer):integer ;
begin
range:= random(1000000) mod (l-f+1) + f ;
end;
function mixcases:byte;
var i:integer;
begin
i:=range(97,122);
if random(10)<5 then i:=i-32;
exit(i)
end;
var
i,l:int32;
begin
setlength(a,maxlen);
for l:=0 to maxlen-1 do
begin
for i:=1 to 50 do a[l]:=a[l]+char(mixcases);
begin
a[l]:=midstr(a[l],1,range(10,49)); // make different lengths
if random(10)<1 then a[l]:='_'+a[l];
end;
end;
writeln('strings created, now sort ''em');
end;
var
a:aos=nil;
ans:aos=nil;
l:int32;
maxlen:int32=30;
s:ansistring='';
delim :ansistring=chr(13)+chr(10);
begin
randomize;
writeln('Creating a mixed case string array of ',maxlen,' elements');
CreateAmixedString(a,maxlen);
ans:=sort(a,up);
for l:=low(ans) to high(ans)-1 do writeln(l,' ',ans[l]);
writeln('------------------');
s:=dir(GetCurrentDir ,'b');
ans:=s.split(delim);
ans:=sort(ans,down);
for l:=low(ans) to high(ans)-1 do writeln(l,' ',ans[l]);
writeln('Press return to end');
readln;
end.