Как сохранить строковые методы в переменной и присоединить к другой переменной, содержащей строку, чтобы они работали? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть большая строка, которая представляет собой консольный вывод, преобразованный в html, сохраненный в переменной, и я хотел заменить некоторые строки для определенных свойств c в выводе. Думал, что могу просто использовать метод replace, но мне нужно будет использовать его примерно 10 раз, и я извлекаю то, что нужно заменить, из свойств в массиве, поэтому он не будет каждый раз одинаковым. Есть ли способ создать строку всех методов замены и прикрепить ее к другой переменной? Это то, что я имею в виду.

Я ввел переменную $RMeth, которая выглядит как

<table>
<tr><td>Number:</td><td>44343222</td></tr>
<tr><td>Tasks:</td><td>TASK24</td></tr>
<tr><td>ActionType:</td><td>Add</td></tr>
<tr><td>Requested:</td><td>Name</td></tr>
<tr><td>User:</td><td>User1</td></tr>
<tr><td>Department:</td><td>Interenet</td></tr>
<tr><td>HostName:</td><td>GHFIYYG34343</td></tr>
<tr><td>FQDN:</td><td>Domain.com</td></tr>
<tr><td>Serial:</td><td>4503344444</td></tr>
<tr><td>IPAddress:</td><td>111.111.111</td></tr>
<tr><td>ADDomain:</td><td>domain.com</td></tr>
<tr><td>Reason:</td><td>Testing</td></tr>
</table>
</body></html>

Есть информация о форматировании, но таблица - это все, что я пытаюсь изменить. <td>ADDomain:< это свойство моего вывода, <td>domain.com это значение. Я хочу заменить <td>ADDomain: на <td class="ADDomain">ADDomain:</td>, чтобы он применил форматирование, которое я создал в заголовке, к каждому из свойств. Это единственный способ изменить каждое свойство по отдельности в результатах. Я хотел повторно использовать это и не всегда буду иметь конкретно эти свойства для отчета, поэтому я получал все свойства из неконвертированного вывода, передавая результаты в gm и выбирая свойство note, затем я пробовал несколько методов перебора свойств и замены каждой строки с совпадающим именем свойства.

$RMeth = Foreach($property In $Properties){
    ".Replace(""<td>$($Property):"",""<td class=""$Property"">$($property):</td>"")"
}

Затем я попытался добавить его в результаты для замены, но не сработало.

($HTMLResults)."$RMeth"

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Непонятно, что вам нужно, но вы можете использовать блок скрипта для выполнения чего-то похожего:

$str = 'Replace my app with a ban.'
$rmeth  = {param($s) $s.Replace("app","Apple").Replace("ban","Banana").Replace("pine","Pineapple").Replace("rasp","Raspberry").Replace("apri","Apricot")}
& $rmeth $str

Замена регулярного выражения (-replace для нечувствительности к регистру или -creplace для чувствительности к регистру) будет лучше, чем замена строки, если ваши строки уже содержат желаемые слова. Например, 'apple'.Replace('app','Apple') дает Applele. Метод .Replace() также чувствителен к регистру. С помощью регулярного выражения вы можете добавить дополнительные параметры к условиям сопоставления.

Ниже приведен пример сопоставления регулярного выражения с границей слова \b. Это гарантирует, что I like to eat an app. выполняет замену, а I want an apple. не выполняет замену.

# $replacements is a hash table of your lookup strings and their replacements
$str = 'Replace my app with a ban.'
$replacements = @{'app'='apple';'ban'='banana';'pine'='pineapple';'rasp'='raspberry'}
$replacements.GetEnumerator() | Foreach-Object {
    $str = $str -replace "\b$($_.Key)\b","$($_.Value)"
}
$str
0 голосов
/ 18 июня 2020

Самый простой и лучший способ - поместить его не в переменную, а в функцию:

Function RMeth($string, $props){
    $props.Keys | % {
        $string = $string.replace($_, $props.Item($_))
    }
    $string
}

$properties = @{
    ban="banana"
    app="apple"
}

$yourDataString = "yourstring with app and ban and ..."

RMeth -string $yourDataString -props $properties
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...