日々の記録

ほどよく書いてきます。

SEM-EDS出力ファイルの名前変更スクリプト

2020-03-22 22:52:42 | プログラム

電子顕微鏡には元素分析装置がついている場合がある。測定結果、特にマッピング分析というものをしたあと、個別のデータを画像で出力すると次のようになる。

sample1 IMG1.jpg
sample1 C K.jpg
sample1 O K.jpg
sample1 Si K.jpg
sample1 Cr K.jpg
sample1 Fe K.jpg
sample1 Ni K.jpg
sample1 Pt L.jpg

このままでもいいのだが、ファイル名の順番にソートすると原子番号がくちゃくちゃになってしまうので原子番号を付与したファイル名に付け替えたい。

ファイル名は

代表名␣元素記号␣X線.jpg

というようなルールになっている。代表名にスペースがあるかもしれないため、ファイルをスペースで区切って、元素記号に相当するところを2桁の原子番号+元素記号として名前を付け替える。

だいたい次のようなもので処理ができる。goo blogはプログラムコードを乗せると時々何らかの記号を省略するので画像とコードと両方を乗せることにする。

rename.vbsのようなファイルに下記の内容を記載し、保存。このvbsファイルにjpgファイルなどをまとめてドロップすれば名前を付け替えてくれる。

VBにはあるのだが、VBScriptにはformat関数がなかったので、原子番号2桁の処理は1000+原子番号の右側2文字を使うようにした。元素名前の配列は、原子番号をnとするとZ(n)が元素記号になるようあものを作って実施。Z(0)になにか入れないと行けないので、0を入れることにした。

IMGというものがつくのはマッピングエリアにおけるSEM像なのでファイル名でソートして一番上に来てほしいので00IMGとなるようにした。ファイル名を処理すると次のようになり、ファイル名ソートで原子番号ソートになってくれる。

sample1 00IMG1.jpg
sample1 06C K.jpg
sample1 08O K.jpg
sample1 14Si K.jpg
sample1 24Cr K.jpg
sample1 26Fe K.jpg
sample1 28Ni K.jpg
sample1 78Pt L.jpg

 

 

Option Explicit
Dim Z
Z = split("0,H,He,Li,Be,B,C,N,O,F,Ne,Na,Mg,Al,Si,P,S,Cl,Ar,K,Ca,Sc,Ti,V,Cr,Mn,Fe,Co,Ni,Cu,Zn,Ga,Ge,As,Se,Br,Kr,Rb,Sr,Y,Zr,Nb,Mo,Tc,Ru,Rh,Pd,Ag,Cd,In,Sn,Sb,Te,I,Xe,Cs,Ba,La,Ce,Pr,Nd,Pm,Sm,Eu,Gd,Tb,Dy,Ho,Er,Tm,Yb,Lu,Hf,Ta,W,Re,Os,Ir,Pt,Au,Hg,Tl,Pb,Bi,Po,At,Rn,Fr,Ra,Ac,Th,Pa,U",",")
 
Dim GetPathArray
Set GetPathArray = WScript.Arguments
 
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
 
Dim pt
Dim FileName
Dim FileObj
Dim SplitedFileName
Dim ElementName
Dim i
 
for each pt in GetPathArray
    FileName = objFSO.GetFileName(pt)
    set FileObj = objFSO.GetFile(pt)
    SplitedFileName = Split(FileName," ")
    ElementName = SplitedFileName(UBound(SplitedFileName)-1)
    For i = 1 to 92
        if ElementName = Z(i) then
            SplitedFilename(UBound(SplitedFileName)-1) = right(1000+i,2) & ElementName
            FileObj.Name = Join(SplitedFilename," ")
        end if
    next
    if left(SplitedFileName(UBound(SplitedFileName)),3)="IMG" then
        SplitedFileName(UBound(SplitedFileName))="00" & SplitedFileName(UBound(SplitedFileName))
        FileObj.Name = Join(SplitedFilename," ")
    end if
next
Set objFSO = Nothing
Set FileObj = Nothing
 
コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« エポキシ混合機 | トップ | 献血と骨髄ドナー候補 »

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

プログラム」カテゴリの最新記事