#powershell
#powershell
Вопрос:
У меня есть следующая переменная Powershell
$var = "AB-0045"
Я хотел бы увеличить число в строке, чтобы оно стало «AB-0046».
Я могу сделать:
$newNumber = [int]$var.Substring($var.length -4,4) 1
Это даст мне желаемое число 46, но затем я должен добавить это 46 в виде строки к новой строке «AB-00».
Есть ли лучший способ сделать это?
Комментарии:
1. Нет, это не так. Строки — это не числа, числа — это не строки, и если вы хотите создать новое строковое значение, вам придется создать новое строковое значение 🙂
2. Лично я бы просто использовал регулярное выражение replace для этого :
[regex]::Replace($var,'d $',{([int]$args[0].Value 1).ToString('0000')})
.3. Может быть, вы могли бы вместо этого использовать объект, который имеет свойство number?
Ответ №1:
Теперь, когда у вас есть целое число, вам нужно будет преобразовать обратно в строку, отформатированную так, как вы хотите, и объединить.
Я бы рекомендовал добавить «AB-«, а не «AB-00» на случай, если ваше число превысит 100.
Для заполнения начальных нулей вы можете использовать оператор -f.
например "{0:d4}" -f 45
Вам все равно нужно сначала получить целое число (45 в примере) из исходной строки.
Комментарии:
1. Хорошо, спасибо, но проблема в том, что когда я получаю 0045 и преобразую его в int, чтобы увеличить его, оно становится 45 и теряет нули.
2. Для этого и нужен оператор -f
Ответ №2:
Я тестировал с Replace()
помощью метода класса регулярных выражений и Split()
метода класса string с помощью средства форматирования строк. Split()
кажется быстрее, если ваша строка всегда находится в одном и том же формате. Replace()
Методу все равно, что происходит перед последними 4 числами:
# Replace Method
[regex]::Replace($var,'d{4}
,{([int]$args[0].Value 1).ToString('0000')})
# Split method
$a,[int]$b = $var.split('-'); "{0}-{1:0000}" -f $a, $b