From: Dan Zwell Date: 2007-04-27T10:43:58+09:00 Subject: Re: Date Format Change - Help request Hi, the #each method does not modify the contents of the item that is being looped over. I would use #map. You have the data you want to modify on this array, so call data.map {|row| ...} and do your text transformation inside the block. The last line is what counts, so to transform data[] as you have described, the last line in the block should be 'machine + " , "+ date + " , " + newdate', you don't need "puts" or anything. Dan Snoopy Dog wrote: > Newbie question about changing a date format > > I have a series of data files in the format: > ABC, 7/21/2005, 1825 > CNC1, 7/28/2005, 34.21 > BPR, 9/3/2006, 34872 > > I need to output it to a DIFFERENT Directory as > ABC, 20050721, 1825 > CNC1, 20050728, 34.21 > BPR, 20060903, 34872 > > code snippet below > > Find.find(sourcedir) do |path| > if File.file? path > puts path > log.puts path > output = path.gsub(sourcedir, destdir) # name/dir change for > output file > data = File.readlines(path) > data.each { |row| > (machine, date, produced) = row.split(/,/) > (tmonth, tday, tyear) = date.split(/\//) > newdate = tyear + "%02d" % tmonth + "%02d" % tday > date = newdate > log2.puts machine + " , "+ date + " , " + newdate > } > log.puts "Outputting file " + output > open(output,'w') {|f| f.puts data} > end > end > > I get the file output to the proper location, but the DATE format does > not change. > The log2 shows output in the proper format, the date and newdate ARE the > same. > The output file is still the same as the original input file. > > Not sure what I am missing, but any assistance is appreciated. > Find.find(sourcedir) do |path| if File.file? path puts path log.puts path output = path.gsub(sourcedir, destdir) # name/dir change for output file data = File.readlines(path) data.each { |row| (machine, date, produced) = row.split(/,/) (tmonth, tday, tyear) = date.split(/\//) newdate = tyear + "%02d" % tmonth + "%02d" % tday date = newdate log2.puts machine + " , "+ date + " , " + newdate } log.puts "Outputting file " + output open(output,'w') {|f| data.each{|row| (machine, date, produced) = row.split(/,/) (tmonth, tday, tyear) = date.split(/\//) newdate = tyear + "%02d" % tmonth + "%02d" % tday date = newdate f.write } } end end