PowerShellで、NCファイルをO番号ごとに分割

NCに蓄えられた大量のプログラムをPCに全部吐き出すと、1個のテキストファイルになります。

そのプログラムを1個ずつに分割するのは手間なので、竜の子さんのNC_Dividesを使ったりするわけですが、ファイル名にコメントまで入ったらいいのにな、と思いませんか?思いませんか、そうですか。

 

ということで苦手なPowerShellで作ってみました。(バッチファイルはもっと苦手)

$inputfile = ".\ALLPROG.nc"
$outPath = ".\output\"
$outFile = "header"
$extension = ".nc"
Get-Content -ReadCount 1 $inputfile | ForEach-Object {
$line = $_.ToString()
if($line.StartsWith("O")){
$outFile = $line
$outFile = $outFile.Replace("\","_")
$outFile = $outFile.Replace("/","_")
$outFile = $outFile.Replace(":","_")
$outFile = $outFile.Replace("*","_")
$outFile = $outFile.Replace("?","_")
$outFile = $outFile.Replace("`"","_")
$outFile = $outFile.Replace("<","[")
$outFile = $outFile.Replace(">","]")
$outFile = $outFile.Replace("|","_")
}
$outFullPath = $outpath + $outfile + $extension
Out-File -LiteralPath $outFullPath -Encoding UTF8 -Append -InputObject $line
}

 

使い方は、適当なフォルダを作って、そこにSplitNC.ps1とか適当な名前で上のスクリプトを保存します。

分割したいファイルは、SplitNC.ps1と同じフォルダにALLPROG.ncという名前で放り込んでおきます。

その下にoutputというフォルダを事前に作っておいてSplitNC.ps1を実行すれば、O番号+コメント.ncというファイルが大量に出来上がります。

 

動作としては、1行ずつ読み込み、Oから始まる行が来るとその行全体をファイル名として新規に作成し、次のOから始まる行が来るまで、1行ずつ追記していく、という流れになります。

 

【注意点】

  • 最初のOの前にある行は、header.ncに保存されます。(%とか)
  • outputフォルダに既にファイルがあって、ファイル名がかぶると追記されます。
    (どこからが追記かは後から見てもわかりません)
  • コメントなどに、ファイル名として使えない禁則文字があると、"_"などに置換します。
  • 分割後のファイルはUTF8でエンコードされています。NCエディタの関係などでShift-JISでエンコードする必要がある場合は、最後の行の"UTF8"を"default"に変更してください。(半角英数だけなら関係ない?)
  • PowerShellスクリプトを実行するには、実行ポリシーの変更が必要です。

 改変を含めて、ご自由に使用していただいて構いませんが、実行した結果生じた如何なる不利益に対しても当方では責任を負いません。

自己責任でご使用願います。

 

以下のサイトを参考にさせていただきました。