#string #powershell #variables #rotation
#строка #powershell #переменные #поворот
Вопрос:
У меня есть строковая переменная со строками серийных номеров, мне нужно повернуть серийные номера в переменной, а затем вывести их на экран. В основном переместите первый серийный номер в конец и удалите его с начала. Я могу переместить первый серийный номер в конец переменной, но не могу понять, как удалить его с самого начала .
пример
$serials = "6546544`n6542185`n6546848`n6654898`n6522828"
#append first serial number to the end
$serials ="`n$($serials.split()[0])"
#remove the first serial from beginning.????
Конечный результат должен быть:
"6542185`n6546848`n6654898`n6522828`n6546544"
Комментарии:
1. Просто любопытно. Почему вы делаете это [«6546544
n6542185
n6546848n6654898
n6522828″] против просто [‘6546544′,’6542185’, ‘6546848’, ‘6654898’, ‘6522828’]? По умолчанию используется массив / коллекция, затем вы просто используете обычные методы добавления / удаления массива или добавления / удаления coolection и тому подобное. Вы могли бы также сделать это с помощью переменной $serials . [$serials = ‘6546544 6542185 6546848 6654898 6522828’ -split(‘ ‘)]2. Поскольку я не создаю этот ввод, он извлекается откуда-то еще. И при отправке выходных данных обратно они должны быть в том же формате.
3. Понятно, но использование символов форматирования для принудительного ввода в макет массива по сравнению с использованием естественного массива заставило меня почесать голову.
Ответ №1:
Если вы хотите работать с коллекцией, объект очереди по своей сути обладает этой функциональностью:
$serials = "6546544`n6542185`n6546848`n6654898`n6522828"
# Create queue object with entries for each serial
$queue = [System.Collections.Queue]::new(-split $serials)
# Dequeues the top item and enqueues the item to the bottom
$queue.Enqueue($queue.Dequeue())
# Create string joined by newline character
$serials = $queue -join "`n"
# Optionally output a list and skip the string join above
$queue
Ответ №2:
Это будет работать
$serials = "6546544`n6542185`n6546848`n6654898`n6522828"
$test = @()
$test = $serials.split()
$final = @()
for($i = 1; $i -lt $test.count; $i ){
$final = $test[$i]
}
$final = $test[0]
$final
Ответ №3:
Расширяя эту идею из моего комментария (разделение не требуется).
Пример:
Clear-Host
Write-Verbose -Message "Current array" -Verbose
($serials = '6546544','6542185', '6546848', '6654898', '6522828')
"`n"
#append first serial number to the end
Write-Verbose -Message "Modified array" -Verbose
($serials = $($serials[0]))
"`n"
Write-Verbose -Message "Final array" -Verbose
($serials = ($serials | Select -Skip 1))
# Results
<#
VERBOSE: Current array
6546544
6542185
6546848
6654898
6522828
VERBOSE: Modified array
6546544
6542185
6546848
6654898
6522828
6546544
VERBOSE: Final array
6542185
6546848
6654898
6522828
6546544
#>
.. затем соедините обратно любым способом, который вы пожелаете.
Ответ №4:
Другой подход заключается в разделении серийных файлов на массив и рекомбинации этого массива с первым элементом, добавленным в конец:
# split on "`n" to get an array
$serials = "6546544`n6542185`n6546848`n6654898`n6522828" -split "`n"
# recombine the array in different order with "`n"
$serials = ($serials[1..($serials.Count - 1)] $serials[0]) -join "`n"
$serials
теперь содержит "6542185`n6546848`n6654898`n6522828`n6546544"
Ответ №5:
$serials = "6546544`n6542185`n6546848`n6654898`n6522828"
#append first serial number to the end
$first = ($serials.Split()[0]).trim()
$serials = ($serials -replace $first).trim()
$serials = "`n$($first)"