From: Kurt Euler Date: 2002-06-10T12:11:31+09:00 Subject: RE: Park and others!.....Possible memory bug in Ruby? I'm stumped ! All- Thanks a million, everyone, for your comments in this thread. One follow up: Recall that in the code I asked about (included in thread below), one of the errors occured at line 15, where I write stuff to a new file. This line reads: File.new("./output/"+field[0],"w+").write(content2) Because an error occured here in one test, it appears that this line, like those before it, may also create an OS file. If this is true, is there way to rewrite THIS line to force a close the file during or just after the line executes? Or, perhaps immediate garbage collection occurs with this command, so I needn't worry. Thanks again! -Kurt Euler -----Original Message----- From: Park Heesob [mailto:phasis@kornet.net] Sent: Sunday, June 09, 2002 1:38 AM To: ruby-talk@ruby-lang.org Subject: Re: Possible memory bug in Ruby? I'm stumped! Hi, "Kurt Euler" wrote in message news:C47CCC6238EFD4119C5200508B95A100074AF63B@cup1ex1.portal.com... > All- > > The code as written after the dashed line way below (with file name t7.rb) correctly inserts the contents of file "intro_subtemplate.txt" into a template file during each iteration, resulting in the creation of some 189 identical but differently named files in directory "./output". (There are 189 > filenames in the 189 rows in file "packages.txt".) > > > t7.rb:6:in 'initialize': Invalid argument - "./input/intro_subtemplate.txt" (Errno::EINVAL) > from t7.rb:6:in 'new' > from t7.rb:6 > from t7.rb:2in 'foreach' > from t7.rb:2 > > > t7.rb:15:in 'initialize': Invalid argument - "./output/SOL_BroadbandManager_6.2_SP1" (Errno::EINVAL) > from t7.rb:15:in 'new' > from t7.rb:15 > from t7.rb:2in 'foreach' > from t7.rb:2 > These error messages caused by too many open files. > > Thanks in advance!!! > > -Kurt Euler > (I'm using Ruby 1.67) > > > > File t7.rb: > -------------------------------------------------------------- > content = File.new("./input/main_readme_template.txt").read > IO.foreach("./input/packages.txt") { |x| > field = x.chop.split(':') > content2 = content > > inserta = File.new("./input/intro_subtemplate.txt").read > content2.gsub!(//, inserta) > > #insertb = File.new("./input/install_unix_subtemplate.txt").read > #content2.gsub!(//, insertb) > > #insertc = File.new("./input/files_changed_sp_num-1_subtemplate.txt").read > #content2.gsub!(//, insertc) > > File.new("./output/"+field[0],"w+").write(content2) > puts field[0] > } > Following three lines should be placed before IO.foeach loop. inserta = File.new("./input/intro_subtemplate.txt").read insertb = File.new("./input/install_unix_subtemplate.txt").read insertc = File.new("./input/files_changed_sp_num-1_subtemplate.txt").read Or inserta = File.new("./input/intro_subtemplate.txt").read should be f = File.new("./input/intro_subtemplate.txt") inserta = f.read f.close Park Heesob.