Войти

Показать полную графическую версию : [решено] Сортировать числа (не цифры)


x0r
11-02-2018, 18:23
Привет.
Как можно отсортировать нормально, по числу, а не по символу ? Вот такой файл, нопример:

hls-1080p.m3u8
hls-480p.m3u8
hls-720p.m3u8
hls-360p.m3u8
hls-250p.m3u8

я его потом дальше обрабатываю, подставляю недостающую часть адреса, др. параметры и тяну wget-ом. Так вот, надо отсортировать числа по величине, дабы удобнее было ввести значение кот-е хочешь скачать. Чтоб первым шло самое большое, мешьнее... меньшее и т.д. Там могет быть и hls-2048p.m3u8


:CIKL
SetLocal EnableDelayedExpansion
set /a zero=0
for /f "UseBackQ Delims=" %%A IN ("tmp") do (
set /a zero+=1
if !zero!==1 set a=%%A
if !zero!==2 set b=%%A
if !zero!==3 set c=%%A
if !zero!==4 set d=%%A
if !zero!==5 set e=%%A
)

echo ^ ¤¤¤ ¤¤¤
echo ^ -------------------------------------------------------------------------
echo Что будем качать: (1)-%a% (2)-%b% (3)-%c% (4)-%d% (5)-%e%
echo ^ Q - Выход
echo ^ -------------------------------------------------------------------------
echo ^ ¤¤¤ ¤¤¤
set /p answ=_:

if /i %answ% EQU q goto :EOF
if /i %answ% EQU 1 set m3u=%a%
if /i %answ% EQU 2 set m3u=%b%
if /i %answ% EQU 3 set m3u=%c%
if /i %answ% EQU 4 set m3u=%d%
if /i %answ% EQU 5 set m3u=%e%



sort сортирует тупо по первой цифре и выдает бред.
Это в батнегах вообще можно сделать?

Patroklos
11-02-2018, 18:47
А варианты разрешений у тебя появляются динамически? А то проще всего взять choice.
И жестко привязать. Даже если динамически на мой взгляд здесь просится choice.

x0r
11-02-2018, 19:50
нет, не динамически. это просто файл со списком доступных "качеств". Для каждой новой закачки он будет отличаться только колличеством доступных "качеств". Может быть больше, может быть меньше... но такой же формат, отличия в колличестве строк.
А как это будет с choice ?

зы. оно и так выводит и работает у мну нормально, все скачивается. Просто нет сортировки, чисто визуально... высшее качество в выборе может оказаться под номером "3" например. А яб хотел чтоб оно было всегда первым, а для этого яб хотел отсортировать этот файл по величине чисел. чойс же не сортирует никак вродеб.

Patroklos
11-02-2018, 20:11
Вот скрипт от Иски. Он его кому то тут давал. Адаптируй его под себя. Там где 1234 поставь свои переменные. Как минимум на одно нажатие меньше будет. Ты youtube-dl мучаешь? Она же качество по youtube-dl -Ф сортирует от меньшего к большему. В таком случае твоя задача выглядит элементарной.
@echo off
>nul chcp 65001
setlocal enableextensions enabledelayedexpansion

:Repeat
echo ╔═══════════ Меню ═══════════╗
echo ║ 1. Создать папки ║
echo ║ 2. Переместить заготовки ║
echo ║ 3. Забрать файлы по маске ║
echo ║ 4. Выход из меню ║
echo ╟────────────────────────────╢
echo ║ Выберите один из вариантов ║
echo ╚════════════════════════════╝
echo.
choice.exe /c 1234

if %errorlevel% equ 4 exit /b
if %errorlevel% equ 255 exit /b

call :Sub%errorlevel%
goto :Repeat

endlocal
exit /b 0

:Sub1
call d:\папка\111.bat
exit /b

:Sub2
call d:\папка\222.bat
exit /b

:Sub3
call d:\папка\333.bat
exit /b

x0r
11-02-2018, 22:48
да нет.. я именно wget и grep мучаю :) Качать с трубы есть и много чем.
Хочу просто отсортировать для удобства. Просто странно, искал и не нашел. Неужели за столько лет никому не надо было сортировать по числам в bat\cmd ? ну вот хотяб имена папок:
101
235
560
1258
4580
... онож отсортируе их по первой цифре, но кому это нужно?! :unsure:

Казбек
11-02-2018, 23:31
101
235
560
1258
4580
... онож отсортируе их по первой цифре, но кому это нужно?! »
@echo off
setlocal EnableDelayedExpansion

for /F "tokens=1-4 delims=." %%a in (input.txt) do (
set /A "a=10000+%%a"
set "line[!a:~1!]=%%a"
)

for /F "tokens=2 delims==" %%a in ('set line[') do echo %%a
pause
https://i.imgur.com/61Sxqm9.png

x0r
12-02-2018, 01:13
Ну понял, в общем..
Благодарю Казбек, твой способ отлично сортирует цифры, оч. пригодиццо. Такоеб я сам непридумал :up этточно.

choice не мой случай. наверно можно, но так тоже ниччё, как есть ;)

В общем, когда сталкиваешься с консольют в виндовс, тебя всегда со всех сторон поджидают ёжики, кактусы и иголки... колоться и плакать будешь. Т.к. я все одно юзаю wget и grep , то какого черта я пытаюсь пользовать sort из винды - можнож оттудаж , откуда и grep - из UnixUtils!

Взял её и все получилось как и должно, просто и удобно. Сортировать можно как угодно, вариантов - все какие могут понадобиццо.
В итоге вот это
sort -V -r tmp > tmps
решило всё, все отсортировано по старшинству и выводится в запросе как хотелось


:CIKL
SetLocal EnableDelayedExpansion
"%PROGRAMFILES%\UnixUtils\bin\sort.exe" -V -r tmp > tmps


set /a zero=0
for /f "UseBackQ Delims=" %%A IN ("tmps") do (
set /a zero+=1
if !zero!==1 set a=%%A
if !zero!==2 set b=%%A
if !zero!==3 set c=%%A
if !zero!==4 set d=%%A
if !zero!==5 set e=%%A
)

echo ^ ¤¤¤ ¤¤¤
echo ^ -------------------------------------------------------------------------
echo Что будем качать: (1)-%a% (2)-%b% (3)-%c% (4)-%d% (5)-%e%
echo ^ Q - Выход
echo ^ -------------------------------------------------------------------------
echo ^ ¤¤¤ ¤¤¤
set /p answ=_:

if /i %answ% EQU q goto :EOF
if /i %answ% EQU 1 set m3u=%a%
if /i %answ% EQU 2 set m3u=%b%
if /i %answ% EQU 3 set m3u=%c%
if /i %answ% EQU 4 set m3u=%d%
if /i %answ% EQU 5 set m3u=%e%




hls-1080p.m3u8
hls-720p.m3u8
hls-480p.m3u8
hls-360p.m3u8
hls-250p.m3u8

+ теперь запрос этот я вообще могу убрать, а сразу качать первое значение т.к. оно и будет самым лучшим кач-вом. Этот запрос и нужен был только изза того, что я не мог выбрать автоматом лучшее, приходилось выбирать вручную.

Вроде всё. Если ниччё не испортится\не придумается, завтра закрою как решенную.




© OSzone.net 2001-2012