2016-09-09 2 views
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 

答えて

1

私は問題を発見しました。 AutoItは数値を文字列として扱い、一度に1桁ずつ左から右にソートしていました。

​​機能がこの問題を処理しました。

+0

その番号()を正確に使用したのはどこですか? – McVitas

関連する問題