0

テキスト ファイルから特定のデータを選択する必要があります。しかし、このテキスト ファイルには、1 行に 1024 文字を超えるデータが含まれています。

例: stringtext1との間のデータが必要text 2です。私のコードは、巨大な行のtext1&の間の最初のデータのみを取得text2し、次の行に移動します。しかし、前の巨大な行には、text1 と text2 の複数のインスタンスがあります。それらのデータを取得できません。助けてください。私のコードの下を見つけてください:

Sub Macro1()
  Dim dat As String
  Dim fn As String

  fn = "C:\Users\SAMUEL\Desktop\123\Source1.TXT" '<---- change here

  With CreateObject("Scripting.FileSystemObject").OpenTextFile(fn)
    Do While Not .AtEndOfStream
        dat = .Readline

        If InStr(1, dat, "text1", vbTextCompare) > 0 Then
           x = InStr(dat, "text1") + 8
           y = InStr(dat, "text2")
           Z = y - x

           MsgBox Mid(dat, x, Z)
        End If
    Loop
    .Close
  End With
End Sub

Text1 と Text2 の間のデータを特定のセルに選択したいと考えています。データは、「これは Text1 の素晴らしい Text2 Web サイトです。私はこの Text1 Web サイト Text2 が好きです」のように見えます。これは私がウェブサイトからコピーした膨大なデータです。テキストファイルに保存すると、この Web データの 1 行が 4000 文字を超えます。したがって、テキスト ファイルの行は 1024 文字で終了し、データは次の行に移動して 3 行になります。しかし、私のマクロは文字列 "dat" の最初の 1024 を取り、Web データの 2 行目に移動します。つまり、1024 文字から 4000 文字までのすべてのデータをスキップします。Text1 と Text2 の間に存在する必要なデータは、4000 文字全体のどこにでもある可能性がありますが、同じパターンになります。Text1...Text1...Text2..のようになることはありません。

4

2 に答える 2

0

の使用は、すべての一致を 1 回のショットですばやく置換したり、以下のサンプルのように各一致 (1 行に複数の一致を含む) を処理したりするのに便利な方法です。

  Sub DisappearingSwannie()
  Dim objFSO As Object
  Dim objFil As Object
  Dim objRegex As Object
  Dim objRegMC As Object
  Dim objRegM As Object
  Dim strIn As String
  Dim X
  Dim lngCnt As Long
  Dim fn As String
  fn = "C:\temp\test.TXT" '<---- change here

  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objRegex = CreateObject("vbscript.regexp")
  Set objFil = objFSO.OpenTextFile(fn)
  X = Split(objFil.readall, vbNewLine)

  With objRegex
  .Global = True
  .Pattern = "text1(.+?)text2"
  End With

  For lngCnt = 1 To UBound(X)
  If objRegex.test(X(lngCnt)) Then
  Set objRegMC = objRegex.Execute(X(lngCnt))
  For Each objRegM In objRegMC
  Debug.Print "line " & lngCnt & " position:" & objRegM.firstindex
  Next
  End If
  Next

 End Sub
于 2013-12-25T09:46:23.027 に答える