CODE:external(INT, "lstrcmpi", "lstrcmpiA", "Kernel32");
string path="C:\Windows\System32\drivers\etc"; // путь к папке с файлами
string s[9999];
int count_file=dir(path, #s[0]); // получить список файлов
messagebox("Найдено файлов: "+format(count_file));
sort_array(#s[0], count_file); // сортирует файлы также как 'Проводник'
for(int i=0; i<count_file; i++)messagebox(s[i]);
function sort_array(int #m, int size_array)
{
string s1[255], s2[255], min, temp;
int imin, ii, x, count1, count2, max_len, n1, n2;
new string name[size_array];
new string ext[size_array];
for(int n=0; n<size_array; n++)
{
regexreplace(1, #name[n], m[n], "^(.+?)\.(.+)$", "$1");
if(regexreplace(1, #ext[n], m[n], "^(.+?)\.(.+)$", "$2")==0)ext[n]="";
}
for(int i=0; i<size_array-1; i++)
{min=name[i]; imin=i; ii=i+1;
for(int j=ii; j<size_array; j++)
{
count1=regexsearch(-1, #s1[0], min, "\d+|.+?");
count2=regexsearch(-1, #s2[0], name[j], "\d+|.+?");
x=0;
if(count1>=count2){max_len=count1; for(n2=count2; n2<max_len; n2++)s2[n2]="";}
else {max_len=count2; for(n2=count1; n2<max_len; n2++)s1[n2]="";}
for(n1=0; n1<max_len && x==0; n1++)x=compare(s1[n1], s2[n1]);
if(x==1){min=name[j]; imin=j;}
}
temp=name[i]; name[i]=name[imin]; name[imin]=temp;
temp=ext[i]; ext[i]=ext[imin]; ext[imin]=temp;
}
for(i=0; i<size_array; i++)
{
if(ext[i]!="")m[i]=name[i]+"."+ext[i];
else m[i]=name[i];
}
delete name; delete ext;
}
function compare(string s1, string s2)
{
if(formatci(s1)==0)return -1;
if(formatci(s2)==0)return 1;
if(s1==s2)return 0;
string tmp1, tmp2;
if(regexsearch(1, #tmp1, s1, "^\d+$") && regexsearch(1, #tmp2, s2, "^\d+$"))
{
if(formatsn(tmp1)<=formatsn(tmp2))return -1; return 1;
}
char c1[255], c2[255];
strcpy(#c1[0], s1);
strcpy(#c2[0], s2);
return lstrcmpi(address(#c1[0]), address(#c2[0]));
}