1
テキストファイルを取り込むAutoItスクリプトを作成しています。テキストファイルは、5行のグループで一連のテスト結果で構成されています。このスクリプトはファイルを調べ、各グループの中央値を出力します。スコアは第11回「,」の後に表示されます。このサンプルファイルと例:AutoIt _ArraySort(..)関数が正しくソートされない
a,a,a,a,a,a,a,a,a,a,100.2
a,a,a,a,a,a,a,a,a,a,300.2
a,a,a,a,a,a,a,a,a,a,160.2
a,a,a,a,a,a,a,a,a,a,301.2
a,a,a,a,a,a,a,a,a,a,161.2
b,b,b,b,b,b,b,b,b,b,110.5
b,b,b,b,b,b,b,b,b,b,87.5
b,b,b,b,b,b,b,b,b,b,89.5
b,b,b,b,b,b,b,b,b,b,190.5
b,b,b,b,b,b,b,b,b,b,170.5
c,c,c,c,c,c,c,c,c,c,90.2
c,c,c,c,c,c,c,c,c,c,190.2
c,c,c,c,c,c,c,c,c,c,40.2
c,c,c,c,c,c,c,c,c,c,20.2
c,c,c,c,c,c,c,c,c,c,80.2
私はそれぞれ161.2、110.5とグループa、b、cのための80.2の中央値スコアを期待しています。しかし、次のように出力結果は次のとおりです。
median is = 161.2 ----- sorted array : 100.2 , 160.2 , 161.2 , 300.2 , 301.2
median is = 190.5 ----- sorted array : 110.5 , 170.5 , 190.5 , 87.5 , 89.5
median is = 40.2 ----- sorted array : 190.2 , 20.2 , 40.2 , 80.2 , 90.2
最初のグループは正しくソートませんますが、その後の配列はもはやソートされています。これは、出力の直前に_ArraySort(...)
が呼び出されているにもかかわらずです。なぜこのことが起こっているのでしょうか?次のように
コードは次のとおりです。
Func CondenseResults()
$size = 5 ;temporary, variable to be passed on from other function
$gameDetail = ""
$rawResult = "D:\RTG_Benchmark\results\results.txt"
local $openResults = FileOpen("D:\RTG_Benchmark\results\results2.txt", 1)
Local $i = 1
Local $j = 0
Local $spaceCount = 0
Local $score[$size]
Local $runMultiplier[2] ; 0 = previous, 1 = current
Local $subString
Do
$resultLine = FileReadLine($rawResult, $i) ; read line from raw result
$subString = StringSplit($resultLine,",") ; split
If StringLen($resultLine) = 0 Then
$spaceCount += 1
$j = 0
FileWriteLine ($openResults, "" & @CRLF)
Else
$gameDetail = $subString[1] & $subString[2] & $subString[3] & $subString[4] & $subString[5] & $subString[6] & $subString[7] & $subString[8] & $subString[9] & $subString[10] ; substring 1 - 10
$runMultiplier[1] = $gameDetail
If $i = 1 Then ;
$score[$j] = $subString[11]
Else
If $runMultiplier[1] <> $runMultiplier[0] Then
$j = 0
$score[$j] = $subString[11]
Else
$j += 1
If $j >= $size Then
$j = 0
EndIf
$score[$j] = $subString[11]
EndIf
$resultLine = FileReadLine($rawResult, $i+1)
$subString = StringSplit($resultLine,",") ; split
If StringLen($resultLine) = 0 Or $gameDetail <> $subString[1] & $subString[2] & $subString[3] & $subString[4] & $subString[5] & $subString[6] & $subString[7] & $subString[8] & $subString[9] & $subString[10] Then
_ArraySort($score, 0,0,0,0,1)
ConsoleWrite("median is = " & ($score[$size/2] & " ----- sorted array : " & $score[0] & " , " & $score[1] & " , " & $score[2] & " , " & $score[3] & " , " & $score[4]& @CRLF))
$j = 0
EndIf
EndIf
EndIf
$i += 1
$runMultiplier[0] = $runMultiplier[1]
Until $i >=_FileCountLines($rawResult)
$j += 1
$score[$j] = $subString[11]
_ArraySort($score)
ConsoleWrite("median is =" & ($score[$size/2] & " ----- sorted array : " & $score[0] & " , " & $score[1] & " , " & $score[2] & " , " & $score[3] & " , " & $score[4]& @CRLF))
FileClose($openResults)
sleep(100000)
Return 0
EndFunc
その番号()を正確に使用したのはどこですか? – McVitas