Wow..well my 2cents about #2. Not sure but try using the block version of open, like this: File.open( "file.txt" ) { |file| # use file here } The file should close at the end of that block. Gawnsoft wrote: >I've finally overcome my newbie embarrassment enough to post about >actual code > >-------------------- > >After a couple of years(!) of about-to, I finally leapt over enough >conceptual hurdles to use Ruby for something. (RubyWin 0.0.3.5, with >Ruby 1.6.4) (And thank you Dave and Andy for providing the book with >the distro) > >I was really quite insanely pleased that my first use of Ruby did >something really quite involved - it counts the number of unique IP >addresses of people who have downloaded a particular file from my >web-server - and did it in four lines of code! > > aFile = File.open('D:/Data/Logs/Savant/copyOfGeneral.txt') > > aDictionary = Hash.new > > aFile.each_line { | line | aDictionary[line.slice(/[0-9.]+/)] = 1 >if line.include?("plastic_1.1_lite-UMLtool-fw.exe") } > > puts aDictionary.size > >And then I amended it to tell me how often the file was downloaded >from each unique IP address by changing the following lines to: > > aDictionary = Hash.new(0) > > aFile.each_line { | eachLine | aDictionary[ /[0-9.]+/ ] = >aDictionary[ /[0-9.]+/ ] + 1 if >eachLine.include?("plastic_1.1_lite-UMLtool-fw.exe") } > >All well and good - and I was surprised how quickly I got my head >round file handling, hashes and regular expressions, and delighted at >the way I could use a regexp as the index of a hash. > >(Btw, the file in question is a quite competent little UML diagramming >tool - freeware, for Windows, less than 2MB, which autogenerates Java >stub code. If anyone is interested in that sort of thing, it's >available from the Smalltalk links page in my sig) > >I have some fresh and queries and problems though - > >1) After the file has been opened and I've iterated through it once, I >can't successfully iterate through the opened file for something else. >e.g. > > dictionary2 = Hash.new(0) > > aFile.each_line { | eachLine | dictionary2[ /[0-9.]+/ ] = >dictionary2[ /[0-9.]+/ ] + 1 if eachLine.include?("anotherfile") } > >----------- > >2) I then tried to get the no-longer usable file garbage-collected by >IRB-ing > > aFile = nil > >but even after evaluating this statement, another windows app still >fails to be able to over-write copyOfGeneral.txt > >What should I do to get Ruby to 'free up' the file? > >----------- >3) I tried to cut it down from 4 lines of code to 3 lines of code by >using: > (File.open("d:/Data/Logs/Savant/copyOfGeneral.txt")).each_line { >|line| blah... } > >I'm sure I've seen snippets of code in the newsgroup that call methods >from the result of called methods, although the real reason I tried it >is because I'm currently learning Smalltalk where > > ( File open: "name of aFile" ) each_line: [ blah... ] # >pseudocode only this, in all probability, btw > >works as the parenthesised expression is evaluated first and returns >aFile, which is then sent the eac_line message > >What are the rules as to when object.method.method is a valid >Ruby construct? Is it ever a valid Ruby construct? >------------ >4) I'd like to c'n'p a multi-line method into IRB all at once. Can I? >And if so, how? > >def countDownloads (aFile, aString) > > anIpNum = Regexp.new('[0-9.]+') > > aDictionary = Hash.new(0) > > aFile.each_line { | line | aDictionary[line.slice(anIpNum)] = >aDictionary[line.slice(anIpNum)] + 1 if line.include?(aString) } > > puts aDictionary.size > >end >------------ >5) I'd like to save this method as a .rb file, and invoke it from IRB. >How do I? >------------ >6) I'd like to change the current Windows directory from within IRB. >How do I? > >Using irb_context, I saw there was an irb_path set (to be '(irb)' so I >tried: conf.irb_path="d:/data/grlcode" which returned: >NameError: undefined local variable or method `conf' for >#<Object:0x463b638> > > >Cheers, > Euan >Gawnsoft: http://www.gawnsoft.co.sr >Symbian/Epoc wiki: http://html.dnsalias.net:1122 >Smalltalk links (harvested from comp.lang.smalltalk) http://html.dnsalias.net/gawnsoft/smalltalk > > > >