Что нового

Сортировка массива

dimachn

Новичок
Сообщения
9
Репутация
0
Помогите разобраться пожалуйста. Есть такой файл
лимон 250 567 3.44
апельсин 421 450 0.77
банан 10 15 10.8
виноград 567 1067 3.44
Необходимо выполнить сортировку по последним числам т.е апельсин должен быть первым а банан последним и перезаписать файл. Есть похожая тема про сортировку дат но с регулярными выражениями так и не смог разобраться.
Код:
_FileReadToArray(@ScriptDir&"\orders.txt", $arr)
;???? тут нужно отсортировать массив $arr
_FileWriteFromArray(@ScriptDir&"\orders.txt", $arr,1)
 
Автор
D

dimachn

Новичок
Сообщения
9
Репутация
0
Тогда не подскажете как правильно поставить опции т.к. _ArraySort($arr) будет его сортировать по первым буквам.
 

XpycT

Скриптер
Сообщения
380
Репутация
133
dimachn
Можно так сделать
Код:
#Include <Array.au3>
#Include <File.au3>

Dim $arr

_FileReadToArray(@ScriptDir&"\orders.txt", $arr)

Dim $arr_sort[$arr[0]][3]
For $r = 1 To $arr[0]
	$str_arr = StringSplit($arr[$r], " ")

	If $str_arr[0] > UBound($arr_sort, 2) - 1 Then ReDim $arr_sort[UBound($arr_sort, 1)][$str_arr[0]]

	For $c = 1 To $str_arr[0]
		$arr_sort[$r - 1][$c - 1] = $str_arr[$c]
	Next

	$arr_sort[$r - 1][3] = Number($arr_sort[$r - 1][3])
Next
_ArraySort($arr_sort, 0, 0, 0, 3)

For $r = 1 To $arr[0]
	$arr[$r] = ""

	For $c = 0 To UBound($arr_sort, 2) - 1
		$arr[$r] &= $arr_sort[$r - 1][$c] & " "
	Next

	$arr[$r] = StringTrimRight($arr[$r], 1)
Next

_FileWriteFromArray(@ScriptDir&"\orders_new.txt", $arr, 1)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
dimachn,
Еще вариант.
Код:
#include <Array.au3>

$sText = FileRead(@ScriptDir & '\orders.txt')
$sText = StringRegExpReplace($sText, '[\r\n]*$', '')
$aText = StringSplit(StringStripCR($sText), @LF)
Dim $aTemp[$aText[0]][2]
For $i = 1 To $aText[0]
	$aTemp[$i - 1][0] = $aText[$i]
	$aTemp[$i - 1][1] = Number(StringRegExpReplace($aText[$i], '[^0-9.]', ''))
Next
_ArraySort($aTemp, 0, 0, 0, 1)
$sText = ''
For $i = 0 To $aText[0] - 1
	$sText &= $aTemp[$i][0] & @CRLF
Next
$hFile = FileOpen(@ScriptDir & '\Sort_orders.txt', 2)
FileWrite($hFile, StringTrimRight($sText, 2))
FileClose($hFile)
Но, если строка будет вида 2 апельсина 421 450 0.77, то сортировать будет неправильно.
 
Верх