WSH(JScript)でテキストファイルの読み書きをしよう
WSH(Windows Script Host)でファイルをの読み書きをしなきゃならなくなったのでメモメモです φ(..)。
VBScriptじゃなくてJScriptを使っているのは、僕がVBScriptを触った事がなかったのと、JavaScriptだったらそれなりに扱えたからという理由です。だって、ちょっと差し迫ってたんですもの。
・テキストファイルを読み込もう
・テキストファイルに書き出そう
・UTF-8をBOM無しで書き出そう
・ファイルの新規作成と上書きはどう違う?
・ファイルに追記がしたい!
・扱うファイルサイズにはご注意
テキストファイルを読み込もう
テキストファイルから1行ずつ読み込んで何かする時はこんな感じで・・・。
ADODB.Stream というAPIはファイル操作専用というわけではないのですが、文字コードや改行コードが指定できるので便利です。
オープンしてから読み込みたいファイルを指定するというのは、何とも言えない違和感がありますが、文字コードも改行コードも指定できるのでなかなか優秀じゃないですかね。
テキストファイルに書き出そう
テキストファイルに書き込むだけならこれでOK。
WriteTexメソッドは基本動作が追記なので、実際に使う場合はループを利用してガンガン書き込むことになると思います。
文字コードの変換も内部でいい感じにやってくれてるみたいだし、なかなか便利じゃないですかね。
UTF-8をBOM無しで書き出そう
文字コードも改行コードも指定できて、文字コードの変換も自動でやってくれる便利な ADODB.Stream オブジェクトではありますが、1つだけ、ファイルを UTF-8 で書き出すとBOMを勝手に付けてくれるのだけはいただけません。
いろいろ調べてはみたのですが、BOMを 書く/ 書かない を設定するオプションって無いみたいなんですよね。
というわけで、BOMを避けて書き出さなくてはいけないのがちょっと手間です。方法としては、
う~ん、面倒(苦笑)。なので、頻繁に使うなら関数化しておくのが賢そうではあります。
ファイルの新規作成と上書きはどう違う?
ファイルの新規作成は「ファイルがなければ作る」のに対して、上書きの場合だと「ファイルがなければ作るし、あれば元のファイルを破棄して新しく作り直す」という動作となります。
ちなみに新規作成モードで書き込もうとして既にファイルが存在した場合にはエラーになります。
ファイルに追記がしたい!
基本として追記モードというのが無いようなので、これまた自力でなんとしなきゃいけません。
手順としては既存のファイルのデータを全部読み込んでから、データを追加して書き込む感じ?
と思ってたら、ポインタをファイルの末尾に移動させてから書き込めばいいらしい。
これならまだ簡単やね。
でも自分の触っているのがファイルなのか? メモリ上のデータなのか? 今ひとつよく分からんのがやや不安かも・・・。
扱うファイルサイズにはご注意
何度か失敗してわかったのは、どうやらこの ADODB.Stream という API はとにかくファイルを一気に処理しようとしているらしいという事です。
つまりメガとかならまだしも(?)ギガあたりのサイズのファイルを扱おうとすると、途端に重くなってしまうんです。
まぁ、こればっかりは仕様っぽいので仕方ないですね。
try this for BOM:
fh.WriteText('\uFEFF' + 'something', 0);
Posted by: neo | 08/15/2020 at 19:55