我有一个只包含一个行的文本文件。将文件拆分为特定数量的字符时,我遇到了很多麻烦,然后在每个字符块前添加一个字符串。
使用多行文件,我可以非常轻松地为每行添加字符
Get-Content -Path $path | foreach-object {$string + $_} | out-file $output
但是只有一行的文件要复杂得多。
例如,如果我有一个包含这些随机字符的文件, (******************************************)我想添加一个字符串到每个 10个字符的开头,那么它看起来像这样,(examplestring ********** examplestring ********** examplestring *** *******) 等等。我到处研究过,但我已经设法将字符添加到每个字符块的 end 。
有没有人有办法做到这一点?最好使用streamreader和writer作为get-content可能不适用于非常大的文件。谢谢。
答案 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
它可以使用一些参数检查,但应该让你开始......