2017-01-20 4 views
0

Например:Пакетная команда для поиска наибольшего числа в наборе строк?

file.txt содержит:

4.3 - random1 
5.6 - random2 
2.2 - random3 
3 - random4 
1.8 - random5 

мне нужна команда, которая будет выводить наибольшее число только, не предшествующая текста.

Т.е.

Output = 5.6 
+5

Это не кодирование оказание услуг! Пожалуйста, предоставьте код, вы уже задали и задали конкретный вопрос! – geisterfurz007

+0

На мой предыдущий вопрос ответил щедрый человек, который дал мне пакетный файл для достижения нужной мне задачи. Разве это так, что ты не веришь, что он был таким щедрым ...? Извините, если я что-то делаю неправильно! –

+1

Я не только так думаю, но и не по теме, но иногда я тоже это делаю, но обычно вы должны сами подойти к проблеме, а затем спросить, когда у вас есть определенная проблема. – geisterfurz007

ответ

0

Вы можете сделать SORTN.bat попытку.

Вот код для этого.

@ECHO OFF 
if "%~1"=="/?" (
    echo.Sorts text by handling first number in line as number not text 
    echo. 
    echo.%~n0 [n] 
    echo. 
    echo. n  Specifies the character number, n, to 
    echo.  begin each comparison. 3 indicates that 
    echo.  each comparison should begin at the 3rd 
    echo.  character in each line. Lines with fewer 
    echo.  than n characters collate before other lines. 
    echo.  By default comparisons start at the first 
    echo.  character in each line. 
    echo. 
    echo.Description: 
    echo.  'abc10def3' is bigger than 'abc9def4' because 
    echo.  first number in first string is 10 
    echo.  first number in second string is 9 
    echo.  whereas normal text compare returns 
    echo.  'abc10def3' smaller than 'abc9def4' 
    echo. 
    echo.Example: 
    echo.  To sort a directory pipe the output of the dir 
    echo.  command into %~n0 like this: 
    echo.   dir /b^|%~n0 
    echo. 
    echo.Source: http://www.dostips.com 
    goto:EOF 
) 
if "%~1" NEQ "~" (
    for /f "tokens=1,* delims=," %%a in ('"%~f0 ~ %*|sort"') do echo.%%b 
    goto:EOF 
) 
SETLOCAL ENABLEDELAYEDEXPANSION 
set /a n=%~2+0 
for /f "tokens=1,* delims=]" %%A in ('"find /n /v """') do (
    set f=,%%B 
    (
     set f0=!f:~0,%n%! 
     set f0=!f0:~1! 
     rem call call set f=,%%%%f:*%%f0%%=%%%%  
     set f=,!f:~%n%! 
    ) 
    for /f "delims=1234567890" %%b in ("!f!") do (
     set f1=%%b 
     set f1=!f1:~1! 
     call set f=0%%f:*%%b=%% 
    ) 
    for /f "delims=abcdefghijklmnopqrstuwwxyzABCDEFGHIJKLMNOPQRSTUWWXYZ~`@#$*_-+=:;',.?/\ " %%b in ("!f!") do (
     set f2=00000000000000000000%%b 
     set f2=!f2:~-20! 
     call set f=%%f:*%%b=%% 
    ) 
    echo.!f1!!f2!!f!,%%B 
    rem echo.-!f0!*!f1!*!f2!*!f!*%%a>&2 
) 

Я дал ему попробовать, используя этот вход в качестве примера

4.3 - random1 
11.3 - random6 
5.6 - random2 
2.2 - random3 
100.1 - random8 
3 - random4 
1.8 - random5 
11.12 - random7 
11.11 - random7 

Это, как я запустил его, но вы должны быть в состоянии захватить выход, а также с помощью команды FOR /F так же, как Стефан показал вы в его ответе.

type sortme.txt |sortn.bat 

Выход

1.8 - random5 
2.2 - random3 
3 - random4 
4.3 - random1 
5.6 - random2 
11.11 - random7 
11.12 - random7 
11.3 - random6 
100.1 - random8 
+0

Вы также можете попробовать JSORT от Dave Benham. http://www.dostips.com/forum/viewtopic.php?f=3&t=5595 – Squashman

+0

Это замечательно! Большое спасибо человеку :) –

+0

@Billy выберите ответ. – Squashman

1

sort сортирует в правильном порядке (Внимание: это сортировки строк, а не число, но будет работать нормально для вашего примера Обратите внимание, что с сравнением строк 5 или 6.3 являются «больше», чем 15.).

Помещенный for вокруг обрабатывать вывод (стандартные маркеры 1 и Space является стандартным разделителем, поэтому for /f получает только первый элемент - нужный номер)

for /f %%a in ('sort t.txt') do set high=%%a 
echo %high% 

EDIT также процесс числа выше 10. Примечание: математика не задействована - это просто умные манипуляции с строками.

@echo off 
setlocal enabledelayedexpansion 

(
    for /f "tokens=1,2 delims=. " %%a in (t.txt) do (
    set a=0000%%a 
    if "%%b"=="-" (echo !a:~-4!) else (echo !a:~-4!.%%b) 
) 
)>temp.txt 
type temp.txt 
pause 
for /f "tokens=1,2 delims=0" %%a in ('sort temp.txt') do set high=%%a 

echo %high% 
+0

Можете уточнить пользователю, что такое специальный случай. Что происходит, когда 11 или 21 добавляются в список. – Squashman

+0

@Squashman: да, лучше сказать очевидное (по крайней мере, некоторым из нас ';)'). Готово. – Stephan

+0

Спасибо, но мне нужно это, чтобы иметь возможность распознавать десятичные числа. Таким образом, он должен уметь захватывать реальное максимальное число, даже когда вводится любое число. Спасибо, хотя я ценю помощь! –

0

Следующий скрипт делает собственно сортировки дробных чисел с восемью цифрами до и после десятичного разделителя . в большинстве:

@echo off 
setlocal EnableExtensions EnableDelayedExpansion 

rem // Define constants here: 
set "_FILE=%~1" & rem // (input file; `%~1` means first command line argument) 
set /A "_ZPAD=8" & rem // (number of zeroes to be used for temporary padding) 

set "_ZERO=" & for /L %%K in (0,1,%_ZPAD%) do set "_ZERO=!_ZERO!0" 

for /F "usebackq delims=- " %%L in ("%_FILE%") do (
    for /F "tokens=1,2 delims=." %%I in ("%%L.") do (
     set "INT=%_ZERO%%%I" & set "FRA=%%J%_ZERO%" 
     set "$NUM_!INT:~-%_ZPAD%!_!FRA:~,%_ZPAD%!=%%L" 
    ) 
) 
set "MIN=" & set "MAX=" 
for /F "tokens=2 delims==" %%L in ('2^> nul set $NUM') do (
    if not defined MIN set "MIN=%%L" 
    set "MAX=%%L" 
) 
echo Minimum: %MIN% 
echo Maximum: %MAX% 

endlocal 
exit /B 

 Смежные вопросы

  • Нет связанных вопросов^_^