2016-08-01 5 views
0

VBAでは、2つのバージョンのテキストファイルを比較し、一致しない行を出力する必要があります。ただし、追加の(ユーザーが指定した)行が最新のテキストファイルに追加されている場合、この行は無視しなければならず、比較は最新のテキストファイルの次の行から続行する必要があります。テキストファイルはかなり大きく、ReadAllプロパティは使用できません。 これまでは、各テキストファイルに同じ数の行があり、その順序は同じであると仮定していたため、すべての行をループするために最初のテキストファイルのみを使用しました。VBA StreamReaderでラインをスキップする方法

Dim JsonPrev, JsonCurr As String 'Names of the text files 
Dim strLinePrev , strLineCurr As String 'The file text 
Dim UserLineAdded As String 

LineAdded = MsgBox("Does the most recent JSON contain an additional input/output, which the first does not?", vbYesNo, "Alert!") 

    If LineAdded <> vbNo Then 
     UserLineAdded = InputBox("Please provide the line that was added" & vbNewLine & "E.g. INPUT AdjustToDate, or OUTPUT Surrender Charge Base") 
     If UserLineAdded = vbNullString Then 
      MsgBox ("Comparison cancelled.") 
      Exit Sub 
     End If 
    End If 

JsonPrev = Range("JSONPrevious").Value 'First Text File name 
JsonCurr = Range("JSONCurrent").Value 'Second Text File name 

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFilePrev = objFSO.OpenTextFile(JsonPrev, 1) 
Set objFileCurr = objFSO.OpenTextFile(JsonCurr, 1) 

DiffCount = 0 

Do Until objFilePrev.AtEndOfStream 
    strLinePrev = objFilePrev.ReadLine 
    StrLineCurr = objFileCurr.ReadLine 

    prevLineNumber = prevLineNumber + 1 
    currLineNumber = currLineNumber + 1 
    If prevLineNumber > 0 Or currLineNumber > 0 Then 
     'Check whether a Line was added 
     If InStr(1, UCase(StrLineCurr), UCase(UserLineAdded)) Then 
      currLineNumber = currLineNumber + 1 
      '*****Add code to update StrLineCurr to the next ReadLine***** 
     End If 

     If strLinePrev <> StrLineCurr Then 
       DiffCount = DiffCount + 1 
       'code to print both lines from different sources 
      End If 
     End If 
    End If 

Loop 

objFilePrev.Close 
objFileCurr.Close 

助けてください。

答えて

0

最初のファイルで(ユーザー指定の)行が見つかった場合は、2番目のファイルの対応する行も無視する必要があると仮定します。

あなたのコード変更

Do Until objFilePrev.AtEndOfStream 
    strLinePrev = objFilePrev.ReadLine 
    StrLineCurr = objFileCurr.ReadLine 

    prevLineNumber = prevLineNumber + 1 
    currLineNumber = currLineNumber + 1 
''''''''''''''''' 
' add the next line , and define the function user_specified 

if user_specified(strLinePrev) then Continue While ' ignore it 

.... 

loop 
    .... 

    '''''''''''''''''''''''''''''''''''' 
function user_specified(line as string) As Boolean 
' define the logic of user specified string 
    ' return True ?false 

end function 
関連する問題