поворот строк текста в переменной

#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 n6546848 n6654898 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)"