2016-09-26 69 views
0

我有一个文本文件,它只包含一个行。将文件分割成特定数量的字符,然后在每个字符块的前面添加一个字符串前面的,我遇到了很多麻烦。如何将字符串添加到PowerShell中每个固定行文本文件块的开头?

对于多行文件,我可以使用 Get-Content -Path $path | foreach-object {$string + $_} | out-file $output很容易地为每行添加字符,但对于只有一行的文件来说,它更加复杂。

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

有没有人有办法做到这一点?最好使用流读取器和写入器作为获取内容可能不适用于非常大的文件。谢谢。

+1

地狱@Adam,欢迎StackOverflow上。不要因最初缺乏答案而感到沮丧,也许你可以编辑你的问题,使其更清晰。例如,我不清楚文件中是否存在换行符,或者这只是一条大线。您可能会发现使用类似于“{}”的工具栏按钮在您的问题中创建缩进的代码块会很有帮助,但您在这些块中键入的内容不会进行文字包装。 –

+0

是的,它有点含糊。编辑。 – AJennings1

+1

相关问答:[如何使用PowerShell分割文本文件](http:// stackoverflow。com/questions/1001776/how-can-i-split-a-text-file-using-powershell) – TessellatingHeckler

回答

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====== 
1

嗯,也有适用于文件系统中获取内容的一些动态参数和设置内容的命令是接近到你要求的东西。例如,如果test.txt的包含了一些*字符,可能交织每四个*有两个+字符是这样的:

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

我不知道这是一个匹配的接近程度是什么你想知道,但是知道这些特定于提供者的参数,如'-Delimiter'是不明显的。在标题'拆分大文件'下可见https://technet.microsoft.com/en-us/library/hh847764.aspx

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 

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

相关问题