; НАЧАЛО
; Подключаемые UDF
#include <array.au3>
; Предполагаем, что файлы находятся в папке скрипта
$WORKDIR=@ScriptDir
; Предполагаем, что тип файлов - текстовый
; Файлы начинаются на букву "а", чтобы не был найден "max.txt"
$MASKA="a*.txt"
; Общее количество строк
$NLINE=0
; Цикл подсчета количества строк
$SEARCH=FileFindFirstFile($WORKDIR&"\"&$MASKA)
while true
$FILE=FileFindNextFile($SEARCH)
if @error then ExitLoop
$HFILE=FileOpen($FILE,0)
while true
FileReadLine($HFILE)
if @error then ExitLoop
$NLINE+=1
wend
wend
FileClose($SEARCH)
; Объявление массива строк
Dim $ALINE[$NLINE][5]
; Заполнение массива строк
$NLINE=0
$SEARCH=FileFindFirstFile($WORKDIR&"\"&$MASKA)
while true
$FILE=FileFindNextFile($SEARCH)
if @error then ExitLoop
$HFILE=FileOpen($FILE,0)
while true
$S=FileReadLine($HFILE)
if @error then ExitLoop
$A=StringSplit($S,Chr(9),2)
for $i=0 to 4
$ALINE[$NLINE][$i]=$A[$i]
next
$NLINE+=1
wend
wend
FileClose($SEARCH)
; Сортировка массива по фамилии
_ArraySort($ALINE,0)
; Формирование элементов с максимальными значениями
$I=0
while $I<UBound($ALINE,1)-1
if $ALINE[$I][0]<>$ALINE[$I+1][0] then
$I=$I+1
else
for $K=1 to 4
if $ALINE[$I][$K]<$ALINE[$I+1][$K] then $ALINE[$I][$K]=$ALINE[$I+1][$K]
next
_ArrayDelete($ALINE,$I+1)
endif
wend
; Создание файла с максимальными значениями
$HFILE=FileOpen("max.txt",2)
for $I=0 to UBound($ALINE,1)-1
FileWriteLine($HFILE,$ALINE[$I][0]&Chr(9)&$ALINE[$I][1]&Chr(9)&$ALINE[$I][2]&Chr(9)&$ALINE[$I][3]&Chr(9)&$ALINE[$I][4])
next
FileClose($HFILE)
; КОНЕЦ