8

ADO Streamを使用して、UTF-8エンコーディングでローカルの大きなテキストファイルから行を読み取りたいので、試してみます

Set objStream = CreateObject("ADODB.Stream")
objStream.Charset = "utf-8"
objStream.Type = 2
objStream.Open
objStream.LoadFromFile = strFile
objStream.LineSeparator = 10
Do Until objStream.EOS
    strLine = objStream.ReadText(-2)
Loop

ただし、その結果、スクリプトは多くのRAMとCPUを使用します。それで、すべてのファイルの内容をメモリにロードせずに、スクリプトを開いて、行区切り文字が見つかるまで読み取るようにスクリプトに指示する方法はありますか?

4

2 に答える 2

3

JT Roff の ADO book のこのスニペットを見ると、理論的にはファイルから 1 行ずつ読み取ることができることがわかります (完全にメモリにロードする必要はありません) 。source パラメータで file: protocoll を使用しようとしましたが、成功しませんでした。

別のアプローチを試してみましょう: .txt ファイルを UTF8 でエンコードされた単純な (1 列) ADO データベース テーブルとして扱うには、ソース ディレクトリに schema.ini ファイルが必要です。

[linesutf8.txt]
ColNameHeader=False
CharacterSet=65001
Format=TabDelimited
Col1=SampleText CHAR WIDTH 100

次に、次のことができます。

  Dim sTDir  : sTDir   = "M:/lib/kurs0705/testdata"
  Dim sFName : sFName  = "[linesutf8.txt]"
  Dim oDb    : Set oDb = CreateObject("ADODB.Connection")
  Dim sCs    : sCs     = Join(Array( _
          "Provider=MSDASQL" _
        , "Driver={Microsoft Text Driver (*.txt; *.csv)}" _
        , "DBQ=" + sTDir _
  ), ";")
  oDb.open sCs
  WScript.Stdin.Readline
  Dim oRs    : Set oRs = oDb.Execute("SELECT * FROM " & sFName)
  WScript.Stdin.Readline
  Do Until oRS.EOF
     WScript.Echo oRS.Fields(0).Value
     oRs.MoveNext
  Loop
  oRs.Close
  oDb.Close

いくつかの背景については、こちらをご覧ください。

于 2013-03-02T16:42:11.180 に答える