Что нового

Поиск наибольшего значения в файлах

Noober

Новичок
Сообщения
16
Репутация
0
Люди помогите!!!
У меня есть несколько файлов надо в них найти по каждой фамилии надо найти наибольшие значение.
Файл 1 тхт
Иванов1 1 0 1 1
Иванов2 1 2 1 2
файл 2 тхт
Иванов2 0 1 2 0
Иванов3 4 4 4 4
Иванов1 0 2 0 2
и т.д.
в результате должны получить файл мах.тхт
Иванов1 1 2 1 2
Иванов2 1 2 2 2
Иванов3 4 4 4 4
P.S. все значения записаны через табуляцию.
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Noober
Не хочу сказать, что оптимальный скрипт, но работает...

Код:
; НАЧАЛО

; Подключаемые 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)

; КОНЕЦ
 
Верх