Удалить первую пустую строку из файла - PullRequest
0 голосов
/ 11 июня 2018

У меня есть строка вроде:

$FileContent = "
    InstallMode = $InstallMode
    Logfile = $Logfile
    Silent = y
"

Затем я удаляю ненужные пробелы и записываю в файл:

$FileContent = $FileContent.Replace(" ","")
New-Item C:\Test.ini -Type File -Value $FileContent

В начале файла все еще есть пробелы,Решение:

$FileContent = " InstallMode = $InstallMode
    Logfile = $Logfile
    Silent = y
"

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

Ответы [ 4 ]

0 голосов
/ 11 июня 2018

Если переменная $Logfile представляет путь, содержащий пробелы, ваш метод .Replace(" ","") также удалит их.

Поэтому я предлагаю использовать основанный на RegEx оператор -Replace, который может привязываться к началу строки ^
(пустая запасная часть может быть опущена)

## Q:\Test\2018\06\11\SO_50794799.ps1
$InstallMode = "doesn't matter"
$LogFile = '"C:\Program Files (x86)\_Tools\"'

$FileContent = @"
    InstallMode = $InstallMode
    Logfile = $Logfile
    Silent = y
"@

$FileContent = $FileContent -Replace "(?sm)^\s+" -Replace ' = ','='
New-Item C:\Test.ini -Type File -Value $FileContent

InstallMode=doesn't matter
Logfile="C:\Program Files (x86)\_Tools\"
Silent=y
0 голосов
/ 11 июня 2018

Первый символ на самом деле не пробел, а возврат каретки (13 в ASCII), а другой - новая строка (10 в ASCII).Вы можете проверить это с помощью этой формулы:

[int[]][char[]]$FileContent

Вы должны получить что-то вроде (список номера ASCII для всех символов в строке):

13
10
32
32
32
32
73

Если вы хотите обрезатьдля этого вы можете просто использовать $FileContent.Substring(2), который удалит первые два символа.

Здесь вы можете проверить все символы и их коды ASCII.

0 голосов
/ 11 июня 2018

Вы можете использовать here-string , они могут использоваться для объявления многострочных строк.

Поскольку содержимое строки должно находиться на следующей строке, @" itотображается по вашему желанию, но не содержит переноса строки в начале.

Это устранит необходимость использования Trim, а ваш существующий Replace будет по-прежнему функционировать как есть.

$FileContent = @"
    InstallMode = $InstallMode
    Logfile = $Logfile
    Silent = y
"@
0 голосов
/ 11 июня 2018

Рассматривали ли вы добавление Trim перед Replace, например:

$FileContent = $FileContent.Trim().Replace(" ","")

Trim удаляет начальные и конечные пробелы.Также есть TrimStart и TrimEnd, если вы хотите удалить только одну или другую.

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