如何在PowerShell中的每个固定行文本文件的开头添加字符串?

时间:2016-09-26 23:07:06

标签: string powershell text streamreader

我有一个只包含一个行的文本文件。将文件拆分为特定数量的字符时,我遇到了很多麻烦,然后在每个字符块前添加一个字符串

使用多行文件,我可以非常轻松地为每行添加字符  Get-Content -Path $path | foreach-object {$string + $_} | out-file $output但是只有一行的文件要复杂得多。

例如,如果我有一个包含这些随机字符的文件, (******************************************)我想添加一个字符串到每个 10个字符的开头,那么它看起来像这样,(examplestring ********** examplestring ********** examplestring *** *******) 等等。我到处研究过,但我已经设法将字符添加到每个字符块的 end

有没有人有办法做到这一点?最好使用streamreader和writer作为get-content可能不适用于非常大的文件。谢谢。

3 个答案:

答案 0 :(得分:1)

嗯,有一些动态参数适用于文件系统get-content和set-content命令,它们与您要求的一致。例如,如果test.txt包含多个*字符,则可以将每四个*与两个+字符交错,如下所示:

get-content .\test.txt -Delimiter "****" | % { "++$_" } | Set-Content test2.txt -NoNewline

我不知道你想要的匹配程度是多么接近,但知道某些特定于提供商的参数可能很有用,例如' -Delimiter&#39 ;不是很明显。请参阅标题'拆分大文件'。

下的https://technet.microsoft.com/en-us/library/hh847764.aspx

答案 1 :(得分:0)

使用可管理的文件大小,您可能想尝试这样的事情:

$directory = "C:\\"
$inputFile = "test.txt"
$reader = new-object System.IO.StreamReader("{0}{1}" -f ($directory, $inputFile))
# prefix string of each line
$startString = "examplestring"
# how many chars to put on each line
$range = 10
$outputLine = ""

$line = $reader.ReadLine()
$i = 0
while ($i -lt $line.length) {
    $outputLine += $($startString + $line.Substring($i, [math]::min($range, ($line.length - $i))))
    $i += $range
}
$reader.Close()
write-output $outputLine

基本上它使用子字符串来剪切每个块,在chumk前面加上给定的字符串,并附加到结果变量。

示例输入:

==========================

示例输出:

examplestring==========examplestring==========examplestring======

答案 2 :(得分:0)

或者,这是一个快速函数,从文件中读取长度分隔的字符串。

Set-StrictMode -Version latest

function read-characters( $path, [int]$charCount ) {
  begin {
    $buffer = [char[]]::new($charCount)
    $path = Join-Path $pwd $path
    [System.IO.StreamReader]$stream = [System.IO.File]::OpenText($path)
    try {
      while (!$stream.EndOfStream) {
        $len = $stream.ReadBlock($buffer,0,$charCount);
        if ($len) {Write-Output ([string]::new($buffer,0,$len))}
      } 
    } catch {
        Write-Error -Exception $error[0]  
    } finally {
        [void]$stream.Close()
    }
  }
}

read-characters .\test.txt -charCount 10 | 
    % {"+$_"} | 
    write-host -NoNewline

它可以使用一些参数检查,但应该让你开始......