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スクリプトを実行するには、実行ポリシーの変更が必要です。

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

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

 

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

コメントをお書きください

コメント: 4
  • #1

    作業者A (火曜日, 13 10月 2020)

    NC_Dividesでは処理しきれない?長大な一括ファイルが出来てしまいました。
    このサイトにたどり着き無事分割できました。
    ありがとうございました。

  • #2

    hako (火曜日, 16 2月 2021 10:35)

    無事大量のファイルが出来上がりました。
    有難うございました。
    一つ質問なのですが、ファイル出力時に各ファイルの先頭行と最終行に%を挿入することは可能でしょうか?
    fanuc機の場合、先頭と最終に%が必要なため。

  • #3

    管理人 (水曜日, 17 2月 2021 10:28)

    >ファイル出力時に各ファイルの先頭行と最終行に%を挿入することは可能でしょうか?
    これでどうでしょうか?
    $inputfile = ".\ALLPROG.nc"
    $outPath = ".\output\"
    $outFile = "header"
    $extension = ".nc"
    Get-Content -ReadCount 1 $inputfile | ForEach-Object {

    $line = $_.ToString()
    if($line.StartsWith("O")){
    $line = $line.Replace("\","_")
    $line = $line.Replace("/","_")
    $line = $line.Replace(":","_")
    $line = $line.Replace("*","_")
    $line = $line.Replace("?","_")
    $line = $line.Replace("`"","_")
    $line = $line.Replace("<","[")
    $line = $line.Replace(">","]")
    $line = $line.Replace("|","_")

    $outFullPath = $outpath + $outfile + $extension
    Out-File -LiteralPath $outFullPath -Encoding UTF8 -Append -InputObject '%'

    $outFile = $line

    $outFullPath = $outpath + $outfile + $extension
    Out-File -LiteralPath $outFullPath -Encoding UTF8 -Append -InputObject '%'

    }
    $outFullPath = $outpath + $outfile + $extension
    Out-File -LiteralPath $outFullPath -Encoding UTF8 -Append -InputObject $line
    }

    なお、当方では、NC通信ソフトで%を付加しております。

  • #4

    hako (金曜日, 12 3月 2021 08:56)

    ご報告遅れてしまい申し訳ございません。
    無事に%付きのファイルが出力できました。
    有難うございました。