First off I want to say this list is very helpful and people are nice
and polite compared to many other email lists and forums I have been on
for years and years, notably the camel lists. Thank you!
Ok so I have a file where I am searching for the string "Jul 14.*" for
example using a regexp and this is working fine. However I have been
debating on how to move forward with what code, $. or tell with seek?
for each line in file
linenumber = $. if /^string/
end
for each line in file
linenumber = tell line if /^string/
end
Will either of the above pseudo-code work?
seek to linenumber and add 1
start re-reading at linenumber+1 and store data until EOF.
I'm not sure I'm understanding your question right, but it sounds like
you want all the data in a file after "Jul 14"? If so there's no need
to traverse through and then seek. Try something like this:
regex = /^Jul 14/
found = false
data = Array.new()
file = File.open("file","r")
file.each{|line|
data << line if(found)
found = true if(line =~ regex)
}
puts data.join("\n")
This will put everything after the line starting with "Jul 14" into an
array delineated by lines. Then you can do whatever you want with it.
If you wanted to alter it so it grabs the data between two different
regexes just add another if(line =~ regex2) line and change found to
false. Hope this helps!
-Dylan
···
On Aug 26, 8:44 am, Derek Smith <derekbellnersm...@yahoo.com> wrote:
Hi All,
First off I want to say this list is very helpful and people are nice
and polite compared to many other email lists and forums I have been on
for years and years, notably the camel lists. Thank you!
Ok so I have a file where I am searching for the string "Jul 14.*" for
example using a regexp and this is working fine. However I have been
debating on how to move forward with what code, $. or tell with seek?
for each line in file
linenumber = $. if /^string/
end
for each line in file
linenumber = tell line if /^string/
end
Will either of the above pseudo-code work?
seek to linenumber and add 1
start re-reading at linenumber+1 and store data until EOF.
Please help and or provide sample code?
thank you
--
Posted viahttp://www.ruby-forum.com/.
text = File.read the_file
scanner = StringScanner.new text
scanner.scan /Jul 14/
# ...
ri StringScanner for details.
···
On Aug 26, 2009, at 08:44, Derek Smith wrote:
Ok so I have a file where I am searching for the string "Jul 14.*" for
example using a regexp and this is working fine. However I have been
debating on how to move forward with what code, $. or tell with seek?
Goal is to find pattern in file, note line number in same file, discard
all prior lines while storing all proceeding lines after pattern was
found?
I have the regexp working and the store working to a table, however
getting the syntax correct for the "start at linenumber +1 from pattern
was found" is evading me.
for each line in file
linenumber = $. if /^string/
end
for each line in file
linenumber = tell line if /^string/
end
Will either of the above pseudo-code work?
seek to linenumber and add 1
start re-reading at linenumber+1 and store data until EOF.
Ok so I have a file where I am searching for the string "Jul 14.*" for
example using a regexp and this is working fine. However I have been
debating on how to move forward with what code, $. or tell with seek?
If it's a small file, use StringScanner:
require 'strscan'
text = File.read the_file
scanner = StringScanner.new text
scanner.scan /Jul 14/
Goal is to find pattern in file, note line number in same file, discard
all prior lines while storing all proceeding lines after pattern was
found?
OK, starting from just this, I'd say:
re = /^Jul 14/
lines =
File.open(filename) do |file|
until file.eof?
break if file.gets =~ re
end
until file.eof?
lines << file.gets
end
end
# ... do something with lines
I have the regexp working and the store working to a table, however
getting the syntax correct for the "start at linenumber +1 from pattern
was found" is evading me.
for each line in file
linenumber = $. if /^string/
end
for each line in file
linenumber = tell line if /^string/
end
Will either of the above pseudo-code work?
seek to linenumber and add 1
start re-reading at linenumber+1 and store data until EOF.
--
I don't know why you'd want to seek or re-read lines given your parameters. Just the one pass is enough. Of course, if you can operate on each line inside the second inner loop, you don't even need to accumulate them into the lines array.