Показать полную графическую версию : сортировка
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] }
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
Надо хотя бы преобразование добавить »
У меня и так все нормально.. Но, согласен, не помешает
Foreigner, у Вас версия, небось, уже четвёртая?
Foreigner
22-06-2015, 16:50
Iska, Да (win 8.1)
В 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, Я имел ввиду конкретный пример. В нем все нормально. Каюсь, был не прав, не обратил внимание, что строки разные.
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
Foreigner, так вот я и не пойму — у Вас именно на приведённом примере отрабатывает корректно, у коллеги Kazun (и у меня) на том же самом примере — нет. У Вас и у коллеги Kazun версия PowerShell вроде как одна и та же. Вот я и пытаюсь понять, как такое может быть.
Foreigner
22-06-2015, 20:50
Iska, У меня так
http://s23.postimg.org/6jpcfwljv/image.png (http://postimage.org/)
Так понимаю разница копирования в файл. При копировать-вставить у меня `t, если изменить на пробелы, то получаем похожий результат.
http://i57.tinypic.com/20trlf4.jpg
Foreigner
22-06-2015, 22:04
Kazun, Вообще как-то странно, при табуляции получается другой результат, сначала 16, а потом 2, даже если сделать так:
gc 1.txt | sort { $_.split("`t")[1] }
Чем пробел отличается от табуляции, как разделитель?
При табуляции происходит правильная сортировка строк. Выше я показал, что получается при 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] } # сортируется как строка
Ну, слава богу, разобрались. Теперь буду спать спокойно :).
При копировать-вставить у меня `t, »
У меня тоже. Форум сохраняет табуляцию при оформлении тэгом «code».
Foreigner, а как у Вас так получилось скопировать, что вышли пробелы вместо имеющейся табуляции?
Foreigner
22-06-2015, 22:53
Iska, У меня в FARе табуляция в редакторе заменяется пробелами.
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.