PeÃ±a, Botp wrote:
From: Brian G. [mailto:[email protected]]
I am trying to create a ruby script that will search a maya ascii file
for specific text. The problem I’m running into is that it’s
running to slow for the system at work.
why do you say it is slow? what is your comparison? where is your
how many files do you have? how large are the files?
how much disk space do you have?
how much memory do you have?
how fast is your cpu?
It’s slow because the script is going to integrated into the companies
online asset management software - and I was told by the IT guys that if
it’s slower than a certain speed it will time out - it currently is too
As far as how many files it ranges between 3-5 (usually), the sizes of
the files vary from about 5MB-50MB
Disk space is not an issue - there’s tons of it. As far memory goes -
the IT guys said it can’t load the whole file into memory.
CPU is fairly fast - but again this isn’t the problem - since it will be
running from a server…
I know that all the information I need is
in the last 5% of the text file - but I haven’t been able to
are you sure of the 5% ?
where is your proof?
I’ve gone through many files and manually located where the text I’m
looking for appears - they appear no further out that 5% from the end…
figure out a way to either jump to near the end, and then
start search through lines
low level, use IO:SEEK_END
I’m not sure how to use the SEEK_END properly and it’s hard finding good
or even better iterating backwards through the file till I find
what I’m looking for…
arggh. but your comparison will be forward. otherwise, you’ll have to
reverse your search/regex pattern. implement a reverse readline/gets.
That sounds good how do I do that?
here is the code I’m currently using - which
are you sure it works? see my comment below, inline of your code.
but slowly - any suggestions for how to speed this up would be
def FindRenderLayers (root)
layersFile = 
dirLocation = root.gsub(/(\)$/, ‘’)
list = Dir.entries(dirLocation)
list.each do |file|
if file =~ /.ma$/
fileName = root + file
File.open(fileName) do |file|
while line = file.gets
if line =~ /connectAttr
if $1 != “defaultRenderLayer”
pls forgive me at this point because i am at a lost
- how could $1, which is patterned after
"renderLayerManager.rlmi[[0-9]]", be ever be equal to
Sorry - yeah that’s not needed - had it a while ago and forgot to erase
- and besides why need to compare again, if you can ask it straight
from your regex comparison?
editedLine = “-” + $1
root = “C:\Users\Brian\Documents\Ruby\”
kind regards -botp