これを書いた理由
「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」の中にあるやつです。
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の説明)
元のは
WriteAllText(出力するファイル名, テキスト文字列)
となっているのを
WriteAllText(出力するファイル名, テキスト文字列, エンコード)
とやればいいらしい。
エンコード
これを使う……?
Encoding.GetEncoding メソッド (Microsoftの説明)
これを使えるようにするには
ただコードステージに書いただけじゃダメなやつもあって
それは「名前空間」
「Initialise」(一番左にデフォルトでついている)の題名の看板みたいなやつをダブルクリックして
青いマルのところに書いてあるのが「External Refernces」に表示されてなければ
「追加」を押して新しい行を1行増やしてから、「ブラウズ」を押して足します。
(dllは自分のPCのどこかにはあるから探す)
(今回のFile.WriteAllTextのところに書いてある、System.IOの下にあるSystem.dllはデフォで入ってるから、こっちについては何もしなくていいと思う)
それから赤いマルのところに書いてあるのを「Namespace Imports」に手入力します。
コードステージに書いたコード
たぶんこのコードステージに入る前に入力引数チェックとかしとけばいいと思う。
これの場合は、入力引数は
- inText(出力したいテキスト文字列)
- Enc(エンコード形式、これの例だと4択:UTF-8(BOMなし)、UTF-8(BOM付)、UTF-16BE、Shift-JIS)
- File_Name(ファイルの出力先をフルパスで)
EncodeTypeのデータ型がよくわからなくて、指定されてないのが来たら全部Shift-JISにすることにしてしまいました。
どうせこれの前に入力引数チェックするからいいやってことで……。
元のWrite Text Fileと同じで、出力ファイルが指定したとこになければ新規作成、あれば上書きです。
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ダメなところがあったらなおしてください。ありがとうございます。