Comments
Description
Transcript
複数ファイルを処理するスクリプト
DIAdem2012 2013/12/05 複数ファイルを処理するスクリプト [1/3] 概要 スクリプトを使用して解析しても、データファイル数が多い場合はすべてを解析するには非常に手間がか かります。複数のデータファイルを一括して自動処理するスクリプトを作成すれば解析作業が楽になりま す。複数のデータファイルを一括して処理するためにはファイルのリストが必要です。DIAdem にはファ イルのリストを配列で返す関数が用意されていますので、比較的簡単に複数ファイル一括処理スクリプトを 作成することができます。 ファイルリストの取得 ファイルのリストを取得するには DirListGet()関数を使用します。DirListGet()関数は引数としてフォルダ ーパスを渡しますが、フォルダーパスを取得するには PathDlgShow()を使用します。 以下のサンプルは PathDlgShow()により「フォルダーの参照」ダ イアログを表示し、DirListGet()が選択したフォルダー内から指定し た条件でファイルのリストを返します。ファイルのリストはインデ ックス 0 から始まる 1 次元配列で返されます。 DirListGet()の 3 番目の引数はソートタイプです。ソートタイプは 以下の 4 種類があります。 "filename", "extension", "filesize", "Date/Time" DirListGet()の 4 番目の引数はファイル名の書式です。ファイル名 の書式は以下の 6 種類があります。 "onlyFilenames", "onlyDirectorynames", "Filenames", "FullFilenames", "FullFilenamesRecursive", "DirectorynamesRecursive" Dim fileList IF PathDlgShow("データファイルパス", InputPath) = "IDOk" Then fileList = DirListGet(OutPutPath, "*.KS2", "Date/Time", "onlyFilenames") 'ここに解析スクリプトを記述 End IF 解析スクリプトは fileList = …と End IF の間に記述します。 ファイルリストからファイルの取り出し 配列に格納されたファイル名を 1 つずつ取り出すには For ~ Next を使用します。配列の最大インデッ クスを取得するには UBound()を使用します。 以下のサンプルスクリプトではファイル名のみを取得して、後でフルパスに組み立てていますが、 DirListGet()の 4 番目の引数に"FullFilenamesRecursive"を指定すれば最初からフルパスで取得することも できます。 -1株式会社 共和電業 www.diadem.jp DIAdem2012 2013/12/05 複数ファイルを処理するスクリプト [2/3] Dim fileList Dim datFilePath Dim i IF PathDlgShow("データファイルパス", InputPath) = "IDOk" Then fileList = DirListGet(OutPutPath, "*.KS2", "Date/Time", "onlyFilenames") For i = 0 To UBound(fileList) datFileName = fileList(i) datFilePath = OutPutPath & datFileName & ".KS2" 'ここに解析スクリプトを記述 Next 'i End IF データの読み込み 先に Data Portal をクリアしてからデータを読み込みます。データの読み込みには DataFileLoad()を使 用します。 Dim fileList Dim datFilePath Dim i IF PathDlgShow("データファイルパス", InputPath) = "IDOk" Then fileList = DirListGet(OutPutPath, "*.KS2", "Date/Time", "onlyFilenames") For i = 0 To UBound(fileList) datFileName = fileList(i) datFilePath = OutPutPath & datFileName & ".KS2" Call Data.Root.Clear() Call DataFileLoad(datFilePath , "Kyowa_KS2", "Load") 'ここに解析スクリプトを記述 Next 'i End IF DataFileLoad()の 2 番目の引数はデータプラグインの指定です。省略することもできますが、明示的に 指定することをお勧めします。 -2株式会社 共和電業 www.diadem.jp DIAdem2012 2013/12/05 複数ファイルを処理するスクリプト [3/3] 解析処理 解析スクリプトを「ここに解析スクリプトを記述」以下の行に記述します。解析スクリプトは「スクリプ ト記録」で記録したものを貼りつけるか、直接スクリプトエディタに記述します。 Dim Dim Dim Dim Dim Dim Dim objGroup objChannel fileList datFilePath datFileName channelCount i, j IF PathDlgShow("データファイルパス", InputPath) = "IDOk" Then fileList = DirListGet(OutPutPath, "*.KS2", "Date/Time", "onlyFilenames") For i = 0 To UBound(fileList) datFileName = fileList(i) datFilePath = OutPutPath & datFileName & ".KS2" Call Data.Root.Clear() Call DataFileLoad(datFilePath, "Kyowa_KS2", "Load") 'ここに解析スクリプトを記述 'すべてのチャンネルをオフセット Set objGroup = Data.Root.ActiveChannelGroup channelCount = objGroup.Channels.Count For j = 1 To channelCount Set objChannel = objGroup.Channels(j) Call ChnOffset(objChannel, objChannel, objChannel.Size, "mean value offset") Next 'j 'ここに印刷や保存を記述 Next 'i End IF 解析が正常に行えることを確認したら「ここに印刷や保存を記述」以下の行に印刷やデータファイルの保 存などの処理を記述します。 以下のサンプルでは元のデータファイルと同じフォルダーに同じファイル名にて TDM 形式で保存します。 'ここに印刷や保存を記述 datFilePath = OutPutPath & datFileName & ".TDM" Call DataFileSave(datFilePath) -3株式会社 共和電業 www.diadem.jp