非常に大きな.txtファイルを読み込み、特定の行を選択してCSVに入れるpowershellコードを書きました。問題は、ファイルは次のようにフォーマットされていることである。テキストファイルを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の1行に書き込むためのデータを取得することはできません。それは正しい列に書き込みますが、私は同じ行にデータを取得する方法を知っています。 – user2026188