階層付きテキストをCSVに変換するPowerShellスクリプト


アウトラインプロセッサの階層付きテキストを、CSV形式に変換するPowerShellスクリプトです。

一般に、アウトラインプロセッサ(アウトラインエディタ)の印刷機能はあまり充実していません。
そこでExcelやOpenOffice(LibreOffice) Calcなど、表計算ソフトから印刷できるよう
階層付きテキストをCSV形式に変換するツールを作成しました。


使い方は次の通りです。
※Windowsの初期状態のままでは、PowerShellスクリプトを実行することはできません。




#階層付きテキスト to CSV変換ツール (Microsoft PowerShellスクリプト)

#ユーザによるカスタマイズ可能な値 開始

#見出しの開始文字列を設定
$headertitle = '○ '
#本文の字下げ文字列を設定
$honbunindent = '  '

#Excelの実行ファイルをフルパスで指定。この例はExcel2010 32bit版 標準インストールの場合
#値を設定した場合は、行先頭の#を削除して下さい
#$excelfullpath = 'C:\\Program Files (x86)\\Microsoft Office\\Office14\\EXCEL.EXE'

#ユーザによるカスタマイズ可能な値 終了


#パス取得
$CurrnetDir = Split-Path  ( & { $myInvocation.ScriptName } ) -parent
Set-Location $CurrnetDir
#ファイル名取得
Write-Host '階層付きテキスト to CSV変換ツール (バージョン6)'
Write-Host ''
Write-Host '階層付きテキストのファイル名を入力して下さい'
$TextBaseName = Read-Host ".txtなどの拡張子も必要です"
$CsvBaseName = [IO.Path]::ChangeExtension($TextBaseName, ".csv")
#本文表示を選択
Write-Host ''
$OutputBody = Read-Host "本文(先頭にピリオドの無い行)を出力しますか? (y/[n])"
#テキストを格納
$TextContent = Get-Content $TextBaseName
#もしOutputBodyがでなければ、見出し行のみ抽出
if ($OutputBody -match '[yY]') {
    $Replaced1 = $TextContent
}
else {
    $Replaced1 = $TextContent | Select-String '^\.'
}

#見出しのみ変換
$Counter = 0
while($Replaced1[$Counter] -ne $null){
    [String]$Line = $Replaced1[$Counter]
    $Line = $Line -replace '^\.',','
    while($Line -match '^,+\.'){
        $Line = $Line -replace '(^,+)\.','$1,'
    }
    $Replaced1[$Counter] = $Line
    $counter++
}
$Replaced1 = $Replaced1 -replace '(^,+)',('$1' + $headertitle)
#本文変換
$Replaced2 = $Replaced1
$Counter = 0
while($Replaced1[$Counter + 1] -ne $null){
    #先行行:判定用
    [String]$Line = $Replaced1[$Counter]
    #未処理行:判定用
    [String]$LinePlus1 = $Replaced1[$Counter + 1]
    #先行行がカンマで始まり、かつ、未処理行がカンマで始まらない場合は加工が必要
    #そうでなければ加工が不要なので処理スキップ
    if(($Line.Substring(0) -match '^,*') -and ($LinePlus1.Substring(0) -match '^([^,]|$)')){
        $Commas = $Line.Substring(0, $Line.LastIndexOf(',') + 1)
        $Replaced2[$Counter + 1] = $Commas + $honbunindent + $LinePlus1
    }
    $Counter++
}
#第1階層は先頭のカンマ不要なので除去
$Replaced2 = $Replaced2 -replace '^,', ''
Set-Content -Path $CsvBaseName -Value $Replaced2
#excelの実行ファイル名が設定されていたら、excelを起動
if($excelfullpath.Length -gt 1){
    Start-Process ($excelfullpath + ' \') -ArgumentList $CsvBaseName
}
#以上



(2014年9月16日)



カテゴリ

PowerShell (2)



コメント




トップページに戻る

© 2015 S.Ishikawa