Visual Basic 2005 Express Edition
寸法表からインポートする式ファイルを作るところはNXに関係ないプログラムですので、通常のVBのコードで問題ないと思います。VBには、 Express Editionという無償版があるので、そちらを利用してVBの処理を作成していこうと思います。NX5のヘルプを見るとMicrosoft .NET Framework 2.0 に対応と書いてあります。この文章を書いている今は2010年4月。そう、Visual Basic 2008 になってます。.NET Frameworkは3.5?かな...どうしよう...ググってみると、まだ、VB2005のダウンロードができるそうなので、VB2005を使うことができました。
(参考にさせて頂いたサイト→ http://winmac.blog33.fc2.com/blog-entry-98.html )
寸法表ファイル
寸法表はこんなCSVファイルとしました。各値は,(カンマ)区切りです。
d ,att_CL_ID ,L ,J ,A1 ,A ,N ,A0 ,att_CL_M ,att_CL_NAMEJ 12 ,UCF201 ,86 ,64 ,11 ,25.5 ,12 ,33.3 ,M10 ,角フランジ形ユニット 15 ,UCF202 ,86 ,64 ,11 ,25.5 ,12 ,33.3 ,M10 ,角フランジ形ユニット 17 ,UCF203 ,86 ,64 ,11 ,25.5 ,12 ,33.3 ,M10 ,角フランジ形ユニット att_で始まる項目 : パート属性(ファイルのプロパティのようなもの)としてパートファイルに割当
att_CL_ID : ファイル名に使用する必須列とタイトル実際のCSVファイルはこれです。
https://sites.google.com/site/nxgatentn/UCF.csv?attredirects=0&d=1
式インポート用のファイル
式インポートファイルの書式は、式名=値です。こんな感じです。
d=12
L=86
J=64
...
CSVファイルを読み込んで、1行ずつこの書式の式ファイルを作成すればOKです。
VB
以降、ググってコピペして、ググってコピペして、ググってコピペして...完成したコードです。いろんな書き方が混ざっているので、VB使いの人には怒られるようなコードなのかもしれませんが、とりあえず良しとしておきます。
おまけにVB2005のプロジェクト作成時に、ウィンドウズアプリケーションで始めればいいのかな?と思って作っていたのですが、途中でFormがいらないことに気づきました(...orz)。直し方がわからなかったのでそのままにしてあります。使うのはPrivate Subの中身なので関係なかったのですが、次はForm使わないようにします / とり方を覚えます。
Option Explicit On
Imports system.IO
Imports VB = Microsoft.VisualBasic
Imports System.Windows.Forms
Imports system.text
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim pathNXGate As String = "c:\nxgate\temp\"
Dim tmpFile As String
Dim tmpFileExp As String
Dim sTmp(5) As String
Dim sAry() As String
Dim sTitle() As String
Dim sAttId As String
Dim sAttNam(30) As String
Dim sAttVal(30) As String
Dim iAttChk(100) As Integer
Dim iCtAtt As Integer = 0
Dim iCt As Integer = 0
Dim i As Integer
Dim num As Integer
Dim sExpLn As String = ""
Dim sLTtl As String = ""
Dim sjisEnc As Encoding = Encoding.GetEncoding("Shift_JIS")
' --------------------------------------File開くDialog
Dim ofd As New OpenFileDialog()
ofd.FileName = "csvUCF.csv"
ofd.InitialDirectory = pathNXGate
ofd.Title = "寸法リストファイルを選択"
If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
tmpFile = ofd.FileName
Else
Exit Sub
End If
' --------------------------------------DataFile有
' 1行目はタイトル行
' パート属性にする列タイトルは先頭にatt_をつける
' FILE名にするタイトルは、att_CL_ID固定&このタイトルは必須
If File.Exists(tmpFile) Then
FileOpen(1, tmpFile, OpenMode.Input, OpenAccess.Read)
' ----------------------------------------------1行目(Title行)処理
sTmp(0) = LineInput(1)
sTmp(0) = Replace(sTmp(0), Chr(9), "")
sTitle = Split(sTmp(0), ",")
num = sTitle.Length
For i = 0 To num - 1
If sTitle(i).IndexOf("att_") = 0 Then ' 先頭がatt_
sTitle(i) = Replace(sTitle(i), "att_", "") ' att_削除
iAttChk(i) = iCtAtt ' 属性数カウント
iCtAtt = iCtAtt + 1
Else
iAttChk(i) = -1
End If
Next
' ----------------------------------------------2行目以降(Title行以外)処理
Do While Not EOF(1)
sTmp(0) = LineInput(1)
sTmp(0) = Replace(sTmp(0), Chr(9), "") ' Tab除去
sAry = Split(sTmp(0), ",")
sAttId = ""
sExpLn = ""
For i = 0 To num - 1
If sTitle(i) <> "" Then
If iAttChk(i) > -1 Then
sAttVal(iAttChk(i)) = sAry(i)
If sTitle(i) = "CL_ID" Then ' ファイル名タイトル
sAttId = sAry(i)
End If
Else
sExpLn = sExpLn & sTitle(i) & "=" & sAry(i) & vbCrLf
End If
End If
Next
' ------------------------------------------式インポート用ファイル作成
tmpFileExp = pathNXGate & sAttId & ".exp"
Dim writer As New StreamWriter(tmpFileExp, False, sjisEnc)
writer.WriteLine(sExpLn)
writer.Close()
'ここにジャーナルコードを追加する
Loop
End If
Me.Close()
End Sub
End Class
このコードのファイル作成(write.Closeのところ)の後に、形状変更と名前を変えて保存のそれぞれのジャーナルを追加しておけば、動くはずです!
とりあえず、ほぼ完成!(多分)
あとはジャーナルと合わせてほんとの完成です。
0 件のコメント:
コメントを投稿