Есть test.lua файл (UTF-8) с содержанием:
function private.PostAuctionsThread(self, auctionInfo)
self:SetThreadName("SHOPPING_POST_AUCTIONS")
local auctionRecord = auctionInfo.record
local postFrame = private.frame.content.result.confirmation.post
private.frame.content.result.cancelBtn:Disable()
private.frame.content.result.postBtn:Disable()
private.frame.content.result.bidBtn:Disable()
private.frame.content.result.buyoutBtn:Disable()
postFrame.postBtn:Enable()
postFrame.closeBtn:Enable()
local undercut = (TSMAPI:GetCustomPriceValue(TSM.db.global.postUndercut, auctionRecord.itemString) or 1)
if undercut > auctionRecord.itemBuyout then
undercut = 1
end
if TSMAPI.Player:IsPlayer(auctionRecord.seller, true, true, true) then
-- don't undercut ourselves
undercut = 0
end
local auctionBuyout
if auctionRecord.isFake then
auctionBuyout = TSMAPI:GetCustomPriceValue(TSM.db.global.normalPostPrice, auctionRecord.itemString) or 1000000
else
auctionBuyout = auctionRecord.buyout - (undercut * auctionRecord.stackSize)
end
в котором необходимо заменить фрагмент:
<табуляция> if TSMAPI.Player:IsPlayer(auctionRecord.seller, true, true, true) then
<табуляция><табуляция> -- don't undercut ourselves
<табуляция><табуляция> undercut = 0
<табуляция> end
с помощью скрипта через Powershell. Казалось бы ничего проще, верно? Ну уж нет. И так, есть сам скрипт:
$text ="фрагмент"
$content = [System.IO.File]::ReadAllText(путьдо\test.lua")
(Get-Content 'путьдо\test.lua') -replace $test,"example" | Set-Content 'путьдо\test.lua'
который вполне успешно работает и всё меняет,
но только в пределах одной строки. Вопрос состоит в том,
как заставить его работать в пределах нескольких строк? И вообще, возможно ли это?
Да, есть специальные символы вроде: `r - возврат каретки `n - переход на следующую строку `t - табуляция `s - пробел, и можно написать что-то вроде:
if TSMAPI.Player:IsPlayer(auctionRecord.seller, true, true, true) then`n`t-- don't undercut ourselves...
и даже пройти проверку на содержание, через $text.contains (четыре`n`tстроки`n`tв`n`tодну) и ответом будет true
Можно просто вывести $content прямо в Powershell, найти нужный фрагмент и через Ctrl+C, Ctrl+V внести необходимый фрагмент в переменную $text
Но на практике, всё это почему не работает.
Возможно, есть какой-то хак с преобразованием строк или через кодировку всего файла в string и (hex) с удалением необходимых элементов и преобразованием назад с сохранением форматирования...
Или можно задать маску в виде паттерна, где началом будет служить первая строка, а последней - первый попавшийся "end"...
Я понимаю что хожу вокруг да около, но упорно не могу понять в чем тут дело. Есть у кого какие-либо идеи?