Лучший отвечающий
Random в Powershell

Вопрос
-
Суть такова, есть файл xml вида
James Cameron
John Travolta
Marcus Fenix
.....
Marc Scaurus
\\
100
101
102
.....
105
Зеленый ещё Поше, но есть желание выучить. Нужно сделать так: Чтобы он взял содержимое xml файла (Get-Content), Рандомом (Get-Radom) взял одну строчку до \\ и добавил к ней одну строку после \\ в Итоге сохранить как новый xml (Out-File как я понял) вида
Marc Scaurus 105
John Travolta 102
James Cameron 100
и т.д.
Заранее спасибо.
- Изменено Jammadov 16 января 2013 г. 6:01
16 января 2013 г. 5:43
Ответы
-
$n,$c = Get-Content 1.xml -Delimiter "\\" [collections.arraylist]$n = $n.replace("\\","").split("`r`n") | Where {$_} [collections.arraylist]$c = $c.split("`r`n") | Where {$_} $n.count..1 |% {$r = new-object random}{ $r.next(0,$n.count) |%{$n[$_] + " " + $c[$_];$n.removeat($_);$c.removeat($_)} } | out-file result.xml
- Помечено в качестве ответа Jammadov 16 января 2013 г. 8:27
16 января 2013 г. 6:41Отвечающий
Все ответы
-
$n,$c = Get-Content 1.xml -Delimiter "\\" [collections.arraylist]$n = $n.replace("\\","").split("`r`n") | Where {$_} [collections.arraylist]$c = $c.split("`r`n") | Where {$_} $n.count..1 |% {$r = new-object random}{ $r.next(0,$n.count) |%{$n[$_] + " " + $c[$_];$n.removeat($_);$c.removeat($_)} } | out-file result.xml
- Помечено в качестве ответа Jammadov 16 января 2013 г. 8:27
16 января 2013 г. 6:41Отвечающий -
$n,$c = Get-Content 1.xml -Delimiter "\\" [collections.arraylist]$n = $n.replace("\\","").split("`r`n") | Where {$_} [collections.arraylist]$c = $c.split("`r`n") | Where {$_} $n.count..1 |% {$r = new-object random}{ $r.next(0,$n.count) |%{$n[$_] + " " + $c[$_];$n.removeat($_);$c.removeat($_)} } | out-file result.xml
$n,$c = Get-Content 1.xml -Delimiter "\\" - эта строка как я понимаю берёт сам текстовой файл и устанавливает слэши как делитель?
что значит split в данном скрипте?
$r.next(0,$n.count) |%{$n[$_] + " " + $c[$_];$n.removeat($_);$c.removeat($_)}
смысл этой строки я вообще не понял. Спасибо большое за ответ!
Спасибо огромное, пару вопросов если не возражаете)
16 января 2013 г. 6:50 -
1) В данном случае для преобразования текста в массив строк,используем метод split с разделителем `r`n(перевод строки).
2) $r.next(0,$n.count)|%{$n[$_]+ " "+ $c[$_];$n.removeat($_);$c.removeat($_)}
- $r.next(0,$n.count) - возвращает случайное число из диапазона 0 - кол-во элементов в массиве имен(для данного случая 4 Cameron,Travolta,etc)
- получаем случайный индекс (скажем 3) и передаем его по конвееру
- $n[$_]+ " "+ $c[$_] - вывод Имя + Число,подставляя индекс в массив $n[3] - Marc Scaurus,$c[3] - 105, индекс начинается с 0
- ; служит разделителем команд
- $n.removeat($_) - удаляем элемент из массива по индексу,чтоб не было повторений,т.е. в нашем примере будет удален $n[3] - Marc Scaurus,$c[3] - 105
16 января 2013 г. 7:11Отвечающий -
1) В данном случае для преобразования текста в массив строк,используем метод split с разделителем `r`n(перевод строки).
2) $r.next(0,$n.count)|%{$n[$_]+ " "+ $c[$_];$n.removeat($_);$c.removeat($_)}
- $r.next(0,$n.count) - возвращает случайное число из диапазона 0 - кол-во элементов в массиве имен(для данного случая 4 Cameron,Travolta,etc)
- получаем случайный индекс (скажем 3) и передаем его по конвееру
- $n[$_]+ " "+ $c[$_] - вывод Имя + Число,подставляя индекс в массив $n[3] - Marc Scaurus,$c[3] - 105, индекс начинается с 0
- ; служит разделителем команд
- $n.removeat($_) - удаляем элемент из массива по индексу,чтоб не было повторений,т.е. в нашем примере будет удален $n[3] - Marc Scaurus,$c[3] - 105
огромнейшее спасибо, и извините что отнял ваше время)16 января 2013 г. 8:32