• ベストアンサー

(VBS) テキストファイル読込での改行コード

VBAからVBスクリプトへの移植作業をしています。 テキストファイル中に改行コード \r\n と \n が混在しているのですが、 \r\n までを1行として取得したいです。 VBAだと Line Input で取得できたのですが、 VBScriptの場合、FileSystemObject.OpenTextFileで開き .ReadLine で読み込むことになりますが、 ReadLineは \n も行の終端とされてしまい、本来1行のデータが複数行に分かれて読み込まれてしまいます。 .ReadAllで一旦すべてを取得してから Split("\r\n") で分割するという方法は ファイルサイズが膨大だと負荷が掛かるので避けたいです。 \n は、これはこれでデータとして必要なので、削除することはできません。 負荷が掛からず、良い方法があればご教授頂きたく思います。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>負荷が掛からず、良い方法があ 何に対しての負荷なんですかね? そもそも、スクリプト言語を選んだ事自体、パフォーマンスを心配するなら、違うでしょう。それに splitでやるにせよ、正規表現を使う方法が、一般的です。JScript には、compile などと言うパフォーマンスを改善するメソッドも用意されています。そういった、テクノロジーの選択も、プログラマーの資質であり、腕の見せ所です。 ちなみに、いろんな方法がありますが、オブジェクト指向の言語であれば、他のフレームワークや、COMを利用するのも、手段としては、取得しておくべき、技術です。 例えばADOを使う方法。古くて、新しい方法です。 http://msdn.microsoft.com/ja-jp/library/jj250065.aspx ストリームに格納し、それを操作する方法を考えれば、VBAでも、VBSでも他の言語でも、同じように扱えるわけです。 http://msdn.microsoft.com/ja-jp/library/jj249729.aspx http://msdn.microsoft.com/ja-jp/library/jj249148.aspx 定数    値  説明 adCR   13   復帰を示します。 adCRLF  -1    既定値。復帰改行を示します。 などとなっています。 この手の質問は、何度も投稿されています。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1416)
回答No.2

>ファイルサイズが膨大だと負荷が掛かる 1Gまでくらいなら問題ないです。 どうしてもイヤというなら、Readメソッドで文字数を 指定し、分割しながら処理すれば如何です? Dim ZEN '前回テキスト Dim ARY '分割した配列 Dim FLG '最終要素が有効かを示す Dim CNT '配列の要素数 Dim IDX '配列のインデックス Dim TXS 'TextStream --- 中略 --- Do Until TXR.AtEndOfStream   '前回の残りに新しいデータを読み込む   ZEN = ZEN & TXR.Read(10000)   '復帰改行で分割する   ARY = Split(ZEN,vbNewLine)   '要素数を記録する   CNT = UBound(ARY)   テキストの最後が復帰改行か調べる   If Right(ZEN, 2) = vbNewLine _   Or TXR.AtEndOfStream Then     '最後の要素は有効     FLG = True     '残るデータは無い     ZEN = ""   Else     '最後のデータは無効(次回に回す)     FLG = False     '最後の要素を次回に送る     ZEN = ARY(CNT)     '要素数を一つ減らす     CNT = CNT - 1   End If   '1行ずつの処理   For IDX = 0 To CNT     ★ここに任意の処理を書く   Next Loop

koos_lucas
質問者

お礼

回答ありがとうございました。 参考にさせていただきます。

すると、全ての回答が全文表示されます。

関連するQ&A