Войти

Показать полную графическую версию : сортировка


Страниц : [1] 2

user171078
22-06-2015, 12:03
как сделать сортировку по первому числу в batch file : ?
http://website/link 50 61
http://website/link2 24 61
http://website/link2 2 20
http://website/link2 16 20

хочу чтобы вышло:
http://website/link2 2 20
http://website/link2 16 20
http://website/link2 24 61
http://website/link 50 4

Foreigner
22-06-2015, 14:24
@echo off
setlocal

for /f "tokens=1-3" %%i in (links.txt) do call:set %%i %%j %%k
for /f "tokens=2 delims==" %%i in ('set sort_') do echo %%i
goto:eof

:set

set /a num=100+%2
set sort_%num%=%*

Powershell:

gc links.txt | sort { $_.split()[1] }

Iska
22-06-2015, 16:05
Powershell: »
Неа:
http://website/link2 16 20
http://website/link2 2 20
http://website/link2 24 61
http://website/link 50 61

Надо хотя бы преобразование добавить:
gc C:\Песочница\073\0001.txt | sort { [int]$_.split()[1] }
Или в Вашей версии PowerShell автоматом числовая сортировка отрабатывает?

Foreigner
22-06-2015, 16:18
Надо хотя бы преобразование добавить »
У меня и так все нормально.. Но, согласен, не помешает

Iska
22-06-2015, 16:24
Foreigner, у Вас версия, небось, уже четвёртая?

Foreigner
22-06-2015, 16:50
Iska, Да (win 8.1)

Kazun
22-06-2015, 17:08
В PowerShell v4 с сортировкой строк все осталось по-прежнему.
http://s12.postimg.org/4fwgk0a0d/sort.jpg (http://postimage.org/)
куда залить картинку (http://postimage.org/index.php?lang=russian)

Foreigner
22-06-2015, 17:22
Kazun, Я имел ввиду конкретный пример. В нем все нормально. Каюсь, был не прав, не обратил внимание, что строки разные.

Iska
22-06-2015, 17:28
Foreigner, Kazun, тогда я перестал понимать :(.

Может быть — ещё от версии ОС зависит (я сталкивался однажды с таким поведением PowerShell — различное поведение одной и той же версии PowerShell с одной и той же версией .Net Framework в разных версиях ОС)?!

Update:
Kazun, Я имел ввиду конкретный пример. В нем все нормально. Каюсь, был не прав, не обратил внимание, что строки разные. »
Foreigner, так приведённый Вами выше (http://forum.oszone.net/post-2521088.html#post2521088) пример у Вас отрабатывает всё-таки некорректно не так, как нужно, да?

Foreigner
22-06-2015, 18:00
Iska, Конкретный пример списка, который дал user171078, отрабатывает как раз корректно, но это просто совпадение. Для других подобных случаев надо таки указывать тип, как вы правильно меня поправили.

ЗЫ. Меня просто сбил с толку результат, вроде все правильно, я и решил, что string преобразуется в int32

Iska
22-06-2015, 20:19
Foreigner, так вот я и не пойму — у Вас именно на приведённом примере отрабатывает корректно, у коллеги Kazun (и у меня) на том же самом примере — нет. У Вас и у коллеги Kazun версия PowerShell вроде как одна и та же. Вот я и пытаюсь понять, как такое может быть.

Foreigner
22-06-2015, 20:50
Iska, У меня так

http://s23.postimg.org/6jpcfwljv/image.png (http://postimage.org/)

Kazun
22-06-2015, 21:50
Так понимаю разница копирования в файл. При копировать-вставить у меня `t, если изменить на пробелы, то получаем похожий результат.

http://i57.tinypic.com/20trlf4.jpg

Foreigner
22-06-2015, 22:04
Kazun, Вообще как-то странно, при табуляции получается другой результат, сначала 16, а потом 2, даже если сделать так:

gc 1.txt | sort { $_.split("`t")[1] }

Чем пробел отличается от табуляции, как разделитель?

Kazun
22-06-2015, 22:30
При табуляции происходит правильная сортировка строк. Выше я показал, что получается при split() - если есть пробелы, вместо табуляции и их разным расположением(как в строке 50, если расширить до 4 пробелов то будет другой результат).

Чем пробел отличается от табуляции, как разделитель? - Как минимум кодами.

PS > [int][char]"`t"
9
PS > [int][char]" "
32
PS > " " -lt "`t"
True

Если привести к визуальному сходству:
PS > "a`tb"
a b
PS > "a b"
a b
PS > "a`tb".split().count
2
PS > "a b".split().count
8

Foreigner
22-06-2015, 22:38
Понял, вопрос не в разделителе, а в их количестве.
Так отрабатывает корректно:

gc 1.txt | sort { ($_ -split '\s+')[1] } # сортируется как строка

Iska
22-06-2015, 22:48
Ну, слава богу, разобрались. Теперь буду спать спокойно :).

При копировать-вставить у меня `t, »
У меня тоже. Форум сохраняет табуляцию при оформлении тэгом «code».

Foreigner, а как у Вас так получилось скопировать, что вышли пробелы вместо имеющейся табуляции?

Foreigner
22-06-2015, 22:53
Iska, У меня в FARе табуляция в редакторе заменяется пробелами.

Iska
23-06-2015, 01:07
Iska, У меня в FARе табуляция в редакторе заменяется пробелами. »
Я, собственно, так примерно и предполагал, памятуя, что Вы пользуете Far Manager.

У меня — нет:
╔════════════════════════════ Редактор ═════════════════════════════╗
║ [ ] Запускать внешний редактор по F4 вместо Alt-F4 ║
║ Команда редактирования: ║
║ ↓║
╟─────────────────────── Встроенный редактор ───────────────────────╢
║ Преобразовывать табуляцию: ║
║ Не преобразовывать табуляцию ↓║
║ [ ] Постоянные блоки [x] Del удаляет блоки ║
║ [x] Сохранять позицию файла [x] Сохранять закладки ║
║ [ ] Автоотступ [x] Курсор за пределами строки ║
║ 4 Размер табуляции [x] Показывать полосу прокрутки ║
║ [x] Пробельные символы [ ] Cлово под курсором ║
║ ║
║ [x] Разрешить редактирование открытых для записи файлов ║
║ [ ] Блокировать редактирование файлов с атрибутом R/O ║
║ [x] Предупреждать при открытии файла с атрибутом R/O ║
║ [x] Автоопределение кодовой страницы ║
║ [x] Использовать кодовую страницу ANSI по умолчанию ║
║ [x] Использовать кодовую страницу ANSI при создании файлов ║
╟───────────────────────────────────────────────────────────────────╢
║ { OK } [ Отмена ] ║
╚═══════════════════════════════════════════════════════════════════╝
Другой вариант, если пользуете — плагин Editor's settings changer и его настройки преобразования табуляции в пробелы при сохранении.

user171078
23-06-2015, 10:34
можно спросить как это сделать на PHP ?




© OSzone.net 2001-2012