Что нового

Случайная рассортировка строк файла.

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Есть задача рассортироваь строки.
Файл *.txt (строки в нем отсортированы по возрастанию, по первой букве)
Например:

ajkdgh
bsidh
cailuyf
dlqWIEY
efkthg
flehrf
gerug

Ф этом файле от 5000 до 10000 строк.
Как беспорядочно (типа Random) рассортировать это?
Именно беспорядочно (случайно)!
Какой тут подход применить?
 

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
Простенький пример, но можно и по-другому сделать.
Код:
; --------- Cчитываем исходный файл -------------
$FileRead = StringStripWS(FileRead("1.txt"),3)
; -----------------------------------------------

; --------- Заносим в массив каждую строку ---------
$array = StringSplit($FileRead,@CRLF,1)
; --------------------------------------------------

$Total = $array[0] ; всего строк

; -------------------- Перемешиваем массив -----------------------
For $i=1 to $Total
	_Swap($array[Random(1,$Total,1)],$array[Random(1,$Total,1)])
Next
; ----------------------------------------------------------------

; -------------- Записываем всё из массива в строковую переменную --------
$new_text = ""
$CRLF = @CRLF

For $i=1 to $Total
	$new_text &= $array[$i] & $CRLF
Next

$new_text = StringTrimRight($new_text,2)
; ------------------------------------------------------------------------

; --- Записываем результат в другой файл -----
$hFile = FileOpen("2.txt",2)
FileWrite($hFile,$new_text)
FileClose($hFile)
; ------------------------------------------

Func _Swap(ByRef $1,Byref $2)
	Local $temp = $1
	$1 = $2
	$2 = $temp
EndFunc

Подправил Random
 
Автор
Yuri

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
kzru_hunter
Спасибо.
То что надо.
А то задолбался все это почти вручную через MS Excel делать.
Делал так:
Код:
$file = FileOpen("Number_Rand.txt", 1)
For $i = 1 To 8266
$num = Random(1, 9000, 1)
FileWrite($file, $num & @CRLF)
Next
FileClose($file)
MsgBox(64, "Числа", "Завершено")

To 8266 - это значит кол-во строк в моем *.txt, совпадающее с кол-вом другого *.txt
Затем экспортирую данные в MS Excel в две колонки:
1-я - из первого *.txt, вторая - из второго *.txt
Затем - сортировка по привязке ко 2-му столбцу.
В итоге - 1-й столбец полностью рассортирован из-за 2-го столбца.
Далее 1-й столбец сохраняю в *.txt
Мутно написал?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Random без третьего аргумента, ЕМНИП, возвращает действительное значение. в этом случае индекс неявным образом преобразуется в 0
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Я думаю здесь достаточный уровень случайности :
Код:
#Include<Array.au3>
$aArray=_FileReadToArray ( $sFilePath )
For $i=1 To UBound($aArray)-1
	$iRandom=Random(65,90,1)
	$sLetter=Chr($iRandom)
	$aArray[$i]=$sLetter & $aArray[$i]
Next
_ArraySort($aArray)
_ArrayTrim( $aArray, 1,0)
_ArrayDisplay($aArray)
 
Верх