none
Random в Powershell RRS feed

  • Вопрос

  • Суть такова, есть файл 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