2016-02-02 231 views
1

我對要轉換爲帶有標題的CSV文件的文本文件有疑問。將文本文件轉換爲帶有標題的CSV文件

的原始文本文件看起來像這樣:

StepStartTime: 2/1/2016 12:02:03 PM 
StepStopTime: 2/1/2016 12:02:06 PM 
StepNumber: 1 
NextStepNumber: 2 
--------------------------------------------------------------- 
StepStartTime: 2/1/2016 12:02:06 PM 
StepStopTime: 2/1/2016 12:02:07 PM 
StepNumber: 2 
NextStepNumber: 3 
--------------------------------------------------------------- 
StepStartTime: 2/1/2016 12:02:07 PM 
StepStopTime: 2/1/2016 12:02:08 PM 
StepNumber: 3 
NextStepNumber: 4 
---------------------------------------------------------------

我想要得到的是以下幾點:

StepStartTime,StepStopTime,StepNumber,NextStepNumber 
2/1/2016 12:02:03 PM,2/1/2016 12:02:06 PM,1,2 
2/1/2016 12:02:06 PM,2/1/2016 12:02:07 PM,2,3 
2/1/2016 12:02:07 PM,2/1/2016 12:02:08 PM,3,4

我試圖得到它在PowerShell中的工作,但沒有運氣遠。我可以閱讀基本級別的代碼,但是將自己的不同操作結合起來是遠遠不夠的。

回答

5

讀輸入到一個字符串,並在隔離線

(Get-Content 'C:\path\to\input.txt' -Raw) -split '-{63}' 

所以你得到的片段像這樣把它分解:

StepStartTime: 2/1/2016 12:02:07 PM 
StepStopTime: 2/1/2016 12:02:08 PM 
StepNumber: 3 
NextStepNumber: 4

更改冒號爲=字符,這樣你就可以轉換snippets to hashtables via ConvertFrom-StringData

$snippet -replace ': ', '=' | ConvertFrom-StringData 

,這將給你這樣對每個東西片段:

Name       Value 
----       ----- 
StepStopTime     2/1/2016 12:02:08 PM 
StepNumber      3 
NextStepNumber     4 
StepStartTime     2/1/2016 12:02:07 PM

從哈希表中創建自定義對象:

New-Object -Type PSObject -Property $hashtable 

讓您可以導出爲CSV格式:

StepStopTime   StepNumber NextStepNumber StepStartTime 
------------   ---------- -------------- ------------- 
2/1/2016 12:02:08 PM 3   4    2/1/2016 12:02:07 PM

Full code:

(Get-Content 'C:\path\to\input.txt' -Raw) -split '-{63}' | Where-Object { 
    $_.Trim() 
} | ForEach-Object { 
    $props = $_.Trim() -replace ': ', '=' | ConvertFrom-StringData 
    New-Object -Type PSObject -Property $props 
} | Export-Csv 'C:\path\to\output.csv' -NoType 

注:如果V2你需要的東西來代替

Get-Content 'C:\path\to\input.txt' -Raw 

Get-Content 'C:\path\to\input.txt' | Out-String 

獲取文件的內容作爲一個還在使用PowerShell串。在PowerShell v3之前,參數-Raw不可用。

+0

如果我使用上面的代碼,那麼我只會將StepStartTime值作爲Column來獲取。其他專欄我沒看到。從字符串數據轉換似乎不太好? 直到替換工作正常方面。 感謝先進! – Rudy86

+0

您正在使用PowerShell v2,或者在讀取輸入文件時省略參數'-Raw'。對於PowerShell v2,通過'Out-String'('(Get-Content'C:\ path \ to \ input.txt'| Out-String)''輸出'Get-Content'輸出,否則添加丟失參數。 –

相關問題