プロが教える店舗&オフィスのセキュリティ対策術

VBAからVBスクリプトへの移植作業をしています。

テキストファイル中に改行コード \r\n と \n が混在しているのですが、
\r\n までを1行として取得したいです。

VBAだと Line Input で取得できたのですが、
VBScriptの場合、FileSystemObject.OpenTextFileで開き .ReadLine で読み込むことになりますが、
ReadLineは \n も行の終端とされてしまい、本来1行のデータが複数行に分かれて読み込まれてしまいます。

.ReadAllで一旦すべてを取得してから Split("\r\n") で分割するという方法は
ファイルサイズが膨大だと負荷が掛かるので避けたいです。

\n は、これはこれでデータとして必要なので、削除することはできません。

負荷が掛からず、良い方法があればご教授頂きたく思います。
よろしくお願い致します。

A 回答 (2件)

>負荷が掛からず、良い方法があ



何に対しての負荷なんですかね?

そもそも、スクリプト言語を選んだ事自体、パフォーマンスを心配するなら、違うでしょう。それに splitでやるにせよ、正規表現を使う方法が、一般的です。JScript には、compile などと言うパフォーマンスを改善するメソッドも用意されています。そういった、テクノロジーの選択も、プログラマーの資質であり、腕の見せ所です。

ちなみに、いろんな方法がありますが、オブジェクト指向の言語であれば、他のフレームワークや、COMを利用するのも、手段としては、取得しておくべき、技術です。

例えばADOを使う方法。古くて、新しい方法です。

http://msdn.microsoft.com/ja-jp/library/jj250065 …

ストリームに格納し、それを操作する方法を考えれば、VBAでも、VBSでも他の言語でも、同じように扱えるわけです。

http://msdn.microsoft.com/ja-jp/library/jj249729 …

http://msdn.microsoft.com/ja-jp/library/jj249148 …

定数    値  説明
adCR   13   復帰を示します。
adCRLF  -1    既定値。復帰改行を示します。


などとなっています。

この手の質問は、何度も投稿されています。
    • good
    • 0

>ファイルサイズが膨大だと負荷が掛かる


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
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/01/22 23:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!