Date Format Change - Help request

S

Snoopy Dog

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.
 
D

Dan Zwell

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 said:
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
 
S

Snoopy Dog

Dan said:
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


THANK YOU DAN

I ended up using

data.map! (|row|

as the control and added the line
machine + ", " + newdate + ", " + produced

as the last line in the block to get my desired result.

Thanks for your help
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,997
Messages
2,570,239
Members
46,827
Latest member
DMUK_Beginner

Latest Threads

Top