Что нового

Сортировка данных в тхт файле

Ivan4310

Новичок
Сообщения
16
Репутация
0
Версия AutoIt: 3.381

Описание:
Сколько не нашел тем по сортировке,никак не могу понять принцип работы... :( ситуация такая,есть тестовый файл,
Код:
$hFile = FileOpen("C:\1.txt", 0)

Его содержание такого типа:
Код:
яблок#7
дынь#12
карандашей#3
мячей#32
Сделайте пожалуйста скрипт,который при запуске изменит таким образом что бы получилось так:
Код:
мячей#32
дынь#12
яблок#7
карандашей#3

То есть отсортирует строки по числу после символа "#"

Помогите кто может,а то всю голову сломал пытаясь разобраться в примерах на форуме... :(
Примечания:
Число строк неопределенное,нужно что бы скрипт обработал все строки которые найдет в текстовом файле...
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
#include 'array.au3'
$file=FileRead(@ScriptDir&'\123')
$str=StringRegExp($file,'(\S+)#(\d+)',3)
Global $arr[(UBound($str))/2][2]

For $i = 0 To UBound($str)-1 Step 2
	$arr[$i/2][0]=$str[$i]
	$arr[$i/2][1]=Number($str[$i+1])
Next
_ArraySort($arr, 1, 0, 0, 1)
$str=''
For $i = 0 To UBound($arr)-1
	$str&=$arr[$i][0]&'#'&$arr[$i][1]& @CRLF
Next
FileWrite(@DesktopDir&'\321',$str)
 
Автор
I

Ivan4310

Новичок
Сообщения
16
Репутация
0
Блин,это выглядит очень сложно :( Но работает отлично!Не могли бы вы если вам не трудно,добавить коментарии,что делает и означает каждая строчка? :(
 

madmasles

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

Local $s_File = @ScriptDir & '\1.txt', $s_Text, $a_Tmp, $i_Ub, $a_Text[1]

$s_Text = FileRead($s_File)
$a_Tmp = StringRegExp($s_Text, '([^\r\n]+#\d+)', 3)
$s_Text = ''
$i_Ub = UBound($a_Tmp)
If Not $i_Ub Then Exit 13
ReDim $a_Text[$i_Ub][2]
For $i = 0 To $i_Ub - 1
	$a_Text[$i][0] = Number(StringRegExpReplace($a_Tmp[$i], '^.*#', ''))
	$a_Text[$i][1] = $a_Tmp[$i]
Next
$a_Tmp = 0
_ArraySort($a_Text, 1)
;~ _ArrayDisplay($a_Text)
For $i = 0 To $i_Ub - 1
	$s_Text &= $a_Text[$i][1] & @CRLF
Next
$s_Text = StringTrimRight($s_Text, 2)
ConsoleWrite($s_Text & @LF)
Если нужно, могу добавить в код комментарии.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Ivan4310 [?]
вам не трудно,добавить коментарии,что делает и означает каждая строчка?
1. Подключает файл функций для работы с массивами
2. Читает файл
3. Парсит в массив с шагом 2, строка/число
6. Цикл с шагом 2 формирует двумерный массив (иначе сортировать не получится), колонка строк и колонка чисел
10. Сортировка массива по колонке номеров
12. Цикл соединяет элементы массива назад в строку, в старый формат, но при этом уже сортированный
15. Запись данных в файл

И ещё, кликай на имена функций, что на форуме что в справке и попадёшь на их описание.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Ivan4310,
[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
package_old.gif
Тема не решена
[/info]
 
Верх