Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Сортировать числа (не цифры) (http://forum.oszone.net/showthread.php?t=333108)

x0r 11-02-2018 18:23 2797356

Сортировать числа (не цифры)
 
Привет.
Как можно отсортировать нормально, по числу, а не по символу ? Вот такой файл, нопример:
Код:

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 2797362

А варианты разрешений у тебя появляются динамически? А то проще всего взять choice.
И жестко привязать. Даже если динамически на мой взгляд здесь просится choice.

x0r 11-02-2018 19:50 2797374

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

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

Patroklos 11-02-2018 20:11 2797381

Вот скрипт от Иски. Он его кому то тут давал. Адаптируй его под себя. Там где 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 2797406

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

Казбек 11-02-2018 23:31 2797419

Цитата:

Цитата x0r
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

Результат

x0r 12-02-2018 01:13 2797430

Ну понял, в общем..
Благодарю Казбек, твой способ отлично сортирует цифры, оч. пригодиццо. Такоеб я сам непридумал :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


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

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


Время: 02:21.

Время: 02:21.
© OSzone.net 2001-