Почему этот код выводит только те строки, на которых я произвел замену? - PullRequest
0 голосов
/ 17 мая 2019

Я написал этот код для проверки работы с текстом.Для каждой строки, прочитанной из моего текстового файла, я заменяю табуляцию / возврат / пробел, затем проверяю, содержит ли строка символ «SAAS», и удаляю А. Затем я записываю содержимое в новый файл.

проблема в том, что новый файл содержит только те строки, на которых я произвел замену, и удаляет любые другие строки текста из исходного файла при записи в новый файл.

$Text = Get-Content -Path C:\Desktop\Phones\Phones_1.txt |
ForEach-Object {($_ -replace '\n','')} |
ForEach-Object {($_ -replace '\r','')} |
ForEach-Object {($_ -replace '\s','')} |
ForEach-Object {IF($_ | Select-String -Pattern 'SAAS'){$_ -replace 'SAAS','SAS'}}
$Text | Out-File 'C:\Desktop\Phones\phone2.txt'

Любая помощь оценивается.

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Поскольку $Text содержит массив из отдельных строк, замена \r, \n довольно бесполезна.

Вы должны предоставить пример вашего ввода и ожидаемого результата путем edit вашего вопроса.

Использование регулярного выражения с lookarounds

(Get-Content .\Phones_1.txt -raw) -replace '\r|\n|\s|(?<=SA)A(?=S)'|Set-Content Phone2.txt

Выводит вывод из ваших вопросов полный текст:

Iwrotethiscodetotestouttextmanipulation.ForeachlinereadfrommytextfileIreplacetabs / возвращает / пространства, thenIcheckifthelinecontainsthecarachters'SAS'andremoveanA.Ithenwritethecontenttoannewfile.TheissueisthatthenewfilecontainsonlylinesthatImadeareplacementonanddeletesanyotherlinesoftextfromtheorinalfilewhenwritingtothenewfile $ Text = Get-Content-PathC:. \ Desktop \ Телефоны \ Phones_1.txt | ForEach-Object {($ -replace '\ п', '')} | ForEach-Object {($ -replace '\ г', '')} | ForEach-Object {($ -replace '\ s', '') } | ForEach-Object {IF ($ | Select-String-Pattern'SAS ') {$ _- replace'SAS', 'SAS'}} $ Text | Out-File'C: \ Desktop \ телефоны \ phone2.txt'Anyhelpisappriciated.

0 голосов
/ 17 мая 2019

Вероятно, это связано с вашей Select-String функцией, которую я не считаю нужной. Кроме того, вы можете связать вместе операторы замены, значительно уменьшая необходимость в том, чтобы продолжать передавать ваш код. Я не думаю, что это вызывает какие-либо проблемы, но вам не нужно также заключать блоки ForEach-Object в фигурные скобки. Вот как это будет выглядеть:

$Text = Get-Content -Path C:\Desktop\Phones\Phones_1.txt |
  ForEach-Object { $_ -replace '\n','' -replace '\r','' -replace '\s','' -replace 'SAAS','SAS' }
$Text | Out-File 'C:\Desktop\Phones\phone2.txt'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...