2016-09-26 74 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 

它可以利用一些參數檢查,但應該讓你開始...

相關問題