Peña, Botp wrote: > From: Brian Green [mailto:gallagherjb / gmail.com] > # 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! :D > # > # 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 > > 1. 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. > 2. 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 -- Posted via http://www.ruby-forum.com/.