Taking two passes at at Text File using Do Until Loops

  • Thread starter Thread starter ExcelMonkey
  • Start date Start date
E

ExcelMonkey

I Am loping through a text file. I need to take two passes at the file. When
I exit the first loop I then proceed to the next loop where I want to start
searching the file again from the first line. However the sData variable is
still set to the line where the first loop exited the Do. How do I restart
this? I tried using the "Open x For Input As #1" again in the second loop
but I recieved an error message saying the file was already open.

'First Pass
Open x For Input As #1
Do While EOF(1)
Line Input #1, sData
LineCount = LineCount + 1
If some condition = True Then
Exit Do
End if
Loop

LineCount = 0

'Second Pass
Do While EOF(1)
Line Input #1, sData
LineCount = LineCount + 1
'Do something
Loop

Thanks

EM
 
Perhaps if you explain what you are actually doing with the file, then maybe
we can give you a different approach then the one you have locked onto. For
example, what is the "some condition" that ends your first loop... what is
the "do something" in your second loop? Also, what kind of data structure is
used in your text file?
 
My first pass looks for a range of text using a start line and and end line
based on key words. My second pass tranfers this segment of the text into a
text box.

Thanks
EM
 
Never mind Rick, I instead incorporated everything into the first loop.

Dim sData As String
Dim RangeFound As Boolean

RangeFound = False

'Open file and find start/end lie of code snippet
Open x For Input As #1
Do Until EOF(1)
Line Input #1, sData
LineCount = LineCount + 1
'Check if line contains sub/function name
If InStr(sData, "Keyword1") + InStr(sData, "Keyword2") > 0 Then
RangeFound = True
End If
If RangeFound = True Then
UserForm1.TextBox1.Text = UserForm1.TextBox1.Text & sData & vbCrLf
End If
'Make sure End stmt is associated with right Sub/Function stmt
If RangeFound = True Then
If InStr(sData, "Keyword3") + InStr(sData, "Keyword3") > 0 Then
Exit Do
End If
End If
Loop
Close #1

Thanks

EM
 
Couldn't you just keep track to see if the input line should be skipped or
processed.

Dim ProcessThisLine as boolean
dim sData as string

ProcessThisLine = false
Open x For Input As #1
Do While EOF(1)

Line Input #1, sData

if instr(1,sdata,"startkeyword",vbtextcompare) > 0 then
processthisline = true
else
if instr(1,sdata,"endkeyword",vbtextcompare) > 0 then
processthisline = false
else
if processthisline = true then
'add it to your textbox
end if
end if
end if

Loop

This will exclude the top and bottom indicator lines. I'm not sure if that's
what you want.

(Untested, uncompiled. Watch for typos!)
 
Back
Top