我已經寫了一些PowerShell代碼來讀取一個非常大的.txt文件,選擇某些行並將它們放入CSV。問題是,該文件的格式是這樣的:將文本文件轉換爲CSV文件
header1: Data1
header2: Data1
header3: Data1
header4: Data1
header1: Data2
header2: Data2
header3: Data2
header4: Data2
,我需要將其轉換爲這樣的:
Header1,Header2,Header3,Header4
data1,data1,data1,data1
data2,data2,data2,data2
的代碼是這樣的:
$path = get-location
$textfile = Get-FileName $env:USERPROFILE\Downloads\
$writefile = "$path\data2.csv"
$reader = [System.IO.File]::OpenText($textfile)
$writer = New-Object System.IO.StreamWriter $writefile
$writer.WriteLine('{0},{1},{2},{3}', "Policy","Schedule Type","Retention Level","Host")
for(;;) {
$line = $reader.ReadLine() #
if ($null -eq $line) {
break
}
$data = $line.Split(":")
if ($null -ne $data[0]) {
$newdata0 = $data[0].trimstart(" ")
}
if ($null -ne $data[1]) {
$newdata1 = $data[1].trimstart(" ")
}
if ($newdata0 -eq "Policy") {$writer.WriteLine('{0},{1},{2},{3}', $newdata1,$null,$null,$null)}
if ($newdata0 -eq "Schedule Type") {$writer.WriteLine('{0},{1},{2},{3}', $null,$newdata1,$null,$null)}
if ($newdata0 -eq "Retention Level") {$writer.WriteLine('{0},{1},{2},{3}', $null,$null,$newdata1,$null)}
if ($newdata0 -eq "Host") {$writer.WriteLine('{0},{1},{2},{3}', $null,$null,$null,$newdata1)}
}
$reader.Close()
$writer.Close()
但我最終與此(實際數據):
Policy,Schedule Type,Retention Level,Host
FS-Win-Servers-Tokyo-DACS_ONLY,,,
,FULL (0),,
,,infinity (9),
,,,opback03e.options-it.com
DB-Win-Exch2013-ADB11,,,
,INCR (1),,
,,6 months (6),
,,,opback03e.options-it.com
DB-Win-Exch2013-MDB11,,,
,INCR (1),,
,,6 months (6),
,,,opback03e.options-it.com
DB-Win-Exch2013-MDB10,,,
,INCR (1),,
,,6 months (6),
,,,opback03e.options-it.com
我想我是這個代碼錯了,或者只是需要找到一種方法來重新格式化csv?
我認爲這將有助於你:http://stackoverflow.com/a/8970351/5341953 – notgiorgi
感謝,但我有CSV文件。問題出在我的代碼中,我無法將數據寫入CSV的一行。它寫入正確的列,但我知道如何獲取同一行上的數據。 – user2026188