2015-04-23 94 views
1

PowerShell中的ISE以下.NET腳本填補數

$stream = [System.IO.StreamWriter] "t.txt" 
$number = 1 
1..500000 | % { 
     $stream.Write("TEST_825A_") 
     $stream.WriteLine($number) 
$number +=1 
} 

$stream.close() 

輸出與

TEST_825A_1 

TEST_825A_2 

TEST_825A_3 

... 

TEST_825A_500000 

一個文本文件,我需要用它來零被填充到8個位數

TEST_825A_00000001 

... 

TEST_825A_00500000 

這不是我甚至更接近真實的語言,和谷歌搜索似乎並沒有幫助。(或者我不明白何w來實現答案)

有人可以幫我一下嗎?

編輯:

工作代碼

$stream = [System.IO.StreamWriter] "t.txt" 
$number = 1 
1..1000 | % { 
     $stream.Write("TEST_825A_") 
     $stream.WriteLine($number.ToString("00000000")) 
$number += 1 

} 

$stream.close() 
+0

只是出於好奇;你爲什麼在PowerShell中使用.NET的東西?有現有的cmdlet,例如「YourString」| Out-File「t.txt」-Append? –

+0

因爲。NET東西是假想最快產生非常大的輸出,例如,當執行與10K行: 方法 \t 完成時間 '>>' \t 29號第 OUTFILE和[陣列] \t 27號 出口CSV \t 第22號 的StreamWriter \t 1.5秒 來源:HTTP://blogs.technet.com/b/gbordier/archive/2009/05/05/powershell-and-writing-files-how-快速寫一個文件.aspx –

+0

出於好奇,你在這種情況下寫入非常大的文件,還是這是一個過早的優化? –

回答

2

你可以給我們一個格式化掩碼的ToString:

$number = 1 
$number.ToString("00000000") 

00000001

+0

謝謝! 這很簡單:-) 它必須被放在Writeline裏面,我已經用工作代碼更新了原始文本。 –

2

我不希望這種改變運行廣泛,但你也可以使用字符串PadLeft()方法。這可能比較慢的特殊原因是因爲你需要先演員。

$number = 5 
([string]$number).PadLeft(8,"0") 

仍然,這將工作。

0

試試這個:

$Results = (1..500000) | % { "TEST_825A_$($_.ToString().PadLeft(8, "0"))" } 
$Results -Join "`r`n" | Set-Content "t.txt" 

這將做1名寫入到HHD ..而不是多者。

我品嚐它在1000 ..:

Measure-Command { 
    $Results = (1..1000) | % { "TEST_825A_$($_.ToString().PadLeft(8, "0"))" } 
    $Results -Join "`r`n" | Set-Content "t1.txt" 
} 

TotalMilliseconds:45.6615

Measure-Command { 
    $stream = [System.IO.StreamWriter] "Y:\Desktop\t2.txt" 
    $number = 1 
    1..1000 | % { 
    $stream.Write("TEST_825A_") 
    $stream.WriteLine($number.ToString("00000000")) 
    $number += 1 
    } 
    $stream.close() 
} 

TotalMilliseconds:63.435