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
benchmark?
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
slow.
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
examples…
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
works
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
greatly appreciated!
require “FileUtils”
require “ftools”
def FindRenderLayers (root)
layersFile = []
dirLocation = root.gsub(/(\)$/, ‘’)
list = Dir.entries(dirLocation)
list.each do |file|
if file =~ /.ma$/
fileName = root + file
layersFile.push file
File.open(fileName) do |file|
while line = file.gets
if line =~ /connectAttr
#("renderLayerManager.rlmi[[0-9]]")/
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
“defaultRenderLayer” ??
Sorry - yeah that’s not needed - had it a while ago and forgot to erase
it.
- and besides why need to compare again, if you can ask it straight
from your regex comparison?
You’re right…
editedLine = “-” + $1
layersFile.push editedLine
end
end
end
end
end
end
return layersFile
end
root = “C:\Users\Brian\Documents\Ruby\”
puts FindRenderLayers(root)
kind regards -botp