Замена строки в файле с сохранением только последнего изменения - PullRequest
0 голосов
/ 27 февраля 2020
        $injectpoint = %{ [Regex]::Matches($file, "DMG>D8>$dob.+?REF>EA>$mrn") } | %{ $_.Value }

        foreach ($data in $injectpoint)
        {
            $file = Get-Content C:\utils\foo\0000000.txt
            inject $file $eth $race $lang $data $dob 
        }
    }
}

function inject($file, $eth, $race, $lang, $injectpoint, $dob)
{
    Set-Location C:\utils\boo\
    $injector = "$race" + ":" + $eth + ":" + $lang
    $newString = $data -replace "DMG>D8>$dob", "DMG>D8>$dob>$injector"
    $file.Replace($data, $newString) | Set-Content C:\utils\foo\testfile.txt
}

Мой мыслительный процесс заключается в том, что, поскольку мой l oop перечитывает файл в память в начале l oop, новые изменения считываются в память, где он затем сможет установить новое содержимое, не удаляя изменения, которые я сделал в своей предыдущей итерации l oop.

Я попытался изменить место чтения файла в память (вне l oop, внутри функции ввода), но текущая итерация - самая далекая, где я вижу последнюю вставку моего сценария, все остальные перезаписаны.

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Проблема здесь во время вашей итерации l oop, вы читаете файл 0000000.txt и сохраняете изменения в testfile.txt. Поскольку вы никогда не читаете testfile.txt после замены строк, вы не видите обновленные строки.

0 голосов
/ 27 февраля 2020

если я правильно понял, вы хотите добавить новый контент в файл C: \ utils \ foo \ testfile.txt , для этого вы должны использовать Add-Content командлет

...