Путаница Powershell по поводу переменной - PullRequest
0 голосов
/ 21 февраля 2019

Я запутался в отношении переменных.

У меня есть код, где у меня есть следующая строка:

$search = $Name.SelectedItem.Split('-')[$($Name.SelectedItem.Split('-').Count-1)]+'*'

Эта строка больше ничего не делает, так как разделяет выбранный элемент (яработает с Dropdownbox) и переносит его в $ search.

Самое смешное, что он делает именно то, что я хочу.

Когда я печатаю $ search, результат можетнапример:

Rue de Rivoli *

Когда я продолжаю в коде и использую $ search по нескольким массивам, по какой-то причине он не работает, потому что ничего не находит вцикл foreach.У меня нет сообщения об ошибке, и даже Rue de Rivoli *, существующая в одном из массивов, ничего не находит.

Когда я заменяю приведенный выше код и прямо даю имя переменной $ search, как виднониже

$search = 'Rue de Rivoli*'

мой поиск в массиве работает.

Что мне здесь не хватает?Я делаю что-то не так, но я не знаю, что это, кто-то может мне помочь, пожалуйста, чтобы понять?

Большое спасибо,

Майк

В соответствии с просьбой,здесь больше кода.Это много, с чем приходится иметь дело, поэтому я сокращаю его.

Clear-Host
$search = $CreateNewUserFormDropDownBoxLocation.SelectedItem.Split('-')[$($CreateNewUserFormDropDownBoxLocation.SelectedItem.Split('-').Count-1)]+'*'
#$search = 'Rue de Rivoli*'

$AllLocations = (get-variable -Include USPennsylvaniaAve, USSixthStreet, USRodeoDrive, USOneMicrosoftWay,`
                    USNorthTantauAvenue, USMarketStreet, USMainStreet, USEmilyDrive,`
                    USCalle8, USBroadway, US18thStreetNW, UKOxfordStreet, UKDowningStreet,`
                    UKBondStreet, FRRuedeRivoli, FRChampsElysees, CHBahnhofstrasse,`
                    CA17thAvenue) | ? {$_.value -is [array]}

Foreach ($Array in $AllLocations)
{
    if ($array.value -like $search)
    {break}
}
$result = "`$$($array.name)"
$result

Это собирается стать функцией и больше ничего не делает, так как из выбранного элемента она разбирает ее на части и добавляет * позадиэто, поэтому я могу искать имя с подстановочным знаком.

У меня есть несколько массивов, и поэтому я включил только необходимые.Следующим шагом является цикл по массивам, и как только он находит элемент, он останавливается и выдает результат.Это мой тестовый код, и он работает и делает то, что я хочу, кроме строки после Clear-Host.Код правильно разрешен и добавлен в $ search, но не работает.Ниже этого кода строки у меня есть чит-строка, в которую я добавляю правильный результат в переменную, и он отлично работает.

1 Ответ

0 голосов
/ 21 февраля 2019

Как прокомментировано, это должно решить проблему.

(я также добавляю это как ответ, чтобы ОП мог принять его. В противном случае этот вопрос, казалось бы, останется нерешенным)

Когда жесткое кодирование строки поиска $search = 'Rue de Rivoli*' работает, но использование Split() для получения строки поиска - нет, тогда обычно строка, которую вы получаете с помощью разбиения, окружена пробельными символами.Если вы оставите их, строка будет выглядеть , чтобы выглядеть очень хорошо, но при использовании в качестве сравнения она не будет работать.

Если, например, полная строка $CreateNewUserFormDropDownBoxLocation.SelectedItem будет:

"François Exemple - Rue de Rivoli"

Затем, используя $CreateNewUserFormDropDownBoxLocation.SelectedItem.Split("-")[-1], вы получите:

" Rue de Rivoli"

Обратите внимание на пространство впереди.

Просто выполнив Trim(), вы избавитесь отэто пространство.

Строка должна быть:

$search = ($CreateNewUserFormDropDownBoxLocation.SelectedItem.Split('-')[-1]).Trim() + '*'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...