Taking two passes at at Text File using Do Until Loops

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
 
R

Rick Rothstein

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?
 
E

ExcelMonkey

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
 
E

ExcelMonkey

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
 
D

Dave Peterson

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!)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Top