Dan Zwell
4/27/2007 1:44:00 AM
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