[BluePrism]Write Text Fileを、エンコード形式指定で出力できるように改造しました。 #blueprism

#これを書いた理由

「Write Text File」(標準VBOの「Utility-File Management」の中にある)でHTMLファイルを出力したのです。
だけどShift-JISで出ちゃって、開くと化けるので、UTF-8で出せば化けないかなって……。
で、どうせ改造するなら文字コードを指定できるようにしておけば使いまわせるなあって……。


#これを試した私のレベル
VBはふわっとなんとなく読めるけどイチから書けと言われると自信ゼロ
C#は厳しいVBだと念じて読めばうっすら読める
.NETは入門書の最初の3ページくらいは読んだかも
JavaScriptがちらっと書けるので名前空間とかそういうものがあるってことくらいだったらわかる

端的に言うと初心者です！

#元のWrite Text Fileのコード

標準VBO「Utility - File Management」の中にあるやつです。

```VB
Try
	File.WriteAllText(File_Name, Text)
	Success = True
	Message = ""
Catch e As Exception
	Success = False
	Message = e.Message
End Try
```

それのなかに「WriteAllText」とあるのの説明がこれです。
[File.WriteAllText Method (Microsoftの説明)](https://docs.microsoft.com/ja-jp/dotnet/api/system.io.file.writealltext?view=netframework-4.8)
![WriteAlltext.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/784c86d1-4a53-958a-2bb7-14008e7cb192.png)


元のは
> WriteAllText(出力するファイル名, テキスト文字列)

となっているのを

> WriteAllText(出力するファイル名, テキスト文字列, エンコード)

とやればいいらしい。

#エンコード
これを使う……？
[Encoding.GetEncoding メソッド (Microsoftの説明)](https://docs.microsoft.com/ja-jp/dotnet/api/system.text.encoding.getencoding?view=netframework-4.8)
![上記ページの一部スクショ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/88c3aa7c-d820-5955-e276-44536b9228c0.png)

#これを使えるようにするには
ただコードステージに書いただけじゃダメなやつもあって
それは「名前空間」

「Initialise」（一番左にデフォルトでついている）の題名の看板みたいなやつをダブルクリックして
![initialise01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/0a0d242b-174a-27d8-6d63-827fcf43c640.png)

これが出てきます。（一番右の「コードオプション」のタブ）
![initialize.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/245cd4d6-021a-91cf-8763-8af194108406.png)


青いマルのところに書いてあるのが「External Refernces」に表示されてなければ
「追加」を押して新しい行を1行増やしてから、「ブラウズ」を押して足します。
（dllは自分のPCのどこかにはあるから探す）
（今回のFile.WriteAllTextのところに書いてある、System.IOの下にあるSystem.dllはデフォで入ってるから、こっちについては何もしなくていいと思う）
それから赤いマルのところに書いてあるのを「Namespace Imports」に手入力します。

たぶん今回の場合はこんな感じ
![コードオプション.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/cda7b4e1-21ce-b4fd-f749-b6a69f4d060e.png)



#コードステージに書いたコード
たぶんこのコードステージに入る前に入力引数チェックとかしとけばいいと思う。
これの場合は、入力引数は

- inText（出力したいテキスト文字列）
- Enc（エンコード形式、これの例だと4択：UTF-8(BOMなし)、UTF-8(BOM付)、UTF-16BE、Shift-JIS）
- File_Name（ファイルの出力先をフルパスで）

EncodeTypeのデータ型がよくわからなくて、指定されてないのが来たら全部Shift-JISにすることにしてしまいました。
どうせこれの前に入力引数チェックするからいいやってことで……。

元のWrite Text Fileと同じで、出力ファイルが指定したとこになければ新規作成、あれば上書きです。

```VB
Dim utfNEnc As System.Text.Encoding = New System.Text.UTF8Encoding(False)
Dim utfEnc = System.Text.Encoding.GetEncoding(65001)
Dim sjisEnc = System.Text.Encoding.GetEncoding(932)
Dim utf16beEnc = System.Text.Encoding.GetEncoding(1201)
Dim EncodeType = sjisEnc

Select Case Enc
    case "utf8N"
        EncodeType = utfNEnc
    case "utf8"
        EncodeType = utfEnc
    case "sjis"
        EncodeType = sjisEnc
    case "utf16be"
        EncodeType = utf16beEnc
    case else
        EncodeType = sjisEnc
End Select

Try
	File.WriteAllText(File_Name, inText, EncodeType)

	Success = True
	Message = ""
Catch e As Exception
	Success = False
	Message = e.Message
End Try
```

#終わりです

標準VBOを書き直してしまうと、
将来バージョンアップがあったときとかに標準VBOも自動で書き換えられてしまって、せっかく書き直したところがなくなってしまうかもしれないので、
改造するときは別名でオブジェクトを新規で作って、アクションをコピーしてきて書きなおすようにしたほうがいいと思います。

標準VBOをチラッと直すだけでこのくらいわかんないレベルなので
もうほんとの初心者のかたにしか役に立たないかな……

VBダメなところがあったらなおしてください。ありがとうございます。