システム変数 SYS_UPLOADNAME の拡張子をとって利用する

目標(GOAL)

システム変数 SYS_UPLOADNAME を使用したときに、展開されるファイル名の拡張子を除いた文字列を取得して利用する。例えば SYS_UPLOADNAME が「データ.xlsx」だとして、これを拡張子違いの同じファイル名(データ.xml、データ.csv など)としたい。

解決手法

【手法1】中間処理

SYS_UPLOADNAME の内容を中間生成する。その際、生成キーワード『取得データの分離』で 「.」を分離記号にし、2番目を取得する。

 例)

  入力項目名     #ファイル名全体  #ファイル名

  取得データの分離  (空欄)      %#ファイル名全体%,.,2

 但し、「abc.exe.config」のようなファイルが対象になると期待する結果は得られません。ファイル名部分に「.」が来ないと徹底しているのであれば上記は可能です。また、拡張子の桁数も徹底しているのであれば 『取得データの切り出し』でも問題ありません。

 

【手法2】手順変数

先ず、手順種『ファイルコピー』を "2つ" 用意する。

  1つ目

  • 『a.コピー元ファイル名(必須)』項に、「$(val:SYS_INPUTFILE)」。
  • 『c.コピー先(必須)』項に、

   「.\何らかのフォルダ名\$(val:SYS_UPLOADNAME)」。  

 2つ目

  • 『a.コピー元ファイル名(必須)』項に、

   「.\何らかのフォルダ名\$(val:SYS_UPLOADNAME)」。

  • 『c.コピー先(必須)』項に、「.\何らかのフォルダ名\

そして、後続の処理で「$(out:前述の2つ目の手順名).拡張子」を活用します。

例えば後続に抽出手順が控えていて、XML の出力部分にアップロードされたファイル名を 活用するのであれば――「.\何らかのフォルダ名\$(out:前述の2つ目の手順名).xml」になります。

手順変数は、無論その手順が実行されていなければ何も情報を保持しません。開発時の、手順の単独実行にはご注意ください。

 

【手法3】作業変数

『a.値の編集式』項に、以下をいれます。

MID("$(val:SYS_UPLOADNAME)",1,FIND("●",SUBSTITUTE("$(val:SYS_UPLOADNAME)",".","●",LEN("$(val:SYS_UPLOADNAME)")-LEN(SUBSTITUTE("$(val:SYS_UPLOADNAME)",".",""))))-1)

<解説>

$(val:SYS_UPLOADNAME) の値内にある「.」の数を、「●」への置換で求めます。その算出結果で、"最も右にある「.」の位置" を得ます。その位置の直前から一文字目までの情報――つまり、ファイル名部分を取り出します。

後は前節【手法2】のように、この「作業変数.拡張子」を後続処理で活用します。こちらも、処理が行われていないと変数には何も保持されませんので開発時の、手順の単独実行にはご注意ください。

【作業変数の設定方法】(今回の例ではなく一般的な例)

f:id:xoblos:20210125082536p:plain

f:id:xoblos:20210125082419p:plain