# File renaming/parsing help

**URL:** <https://www.ruby-forum.com/t/file-renaming-parsing-help/121876>\
**Category:** Ruby\
**Created:** [December 2, 2007, 9:45am UTC](https://www.ruby-forum.com/t/file-renaming-parsing-help/121876 "2007-12-02T09:45:00Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![mike-moscow](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/53a042/32.png) [@mike-moscow](https://www.ruby-forum.com/u/mike-moscow)\
**Post date:** [December 2, 2007, 9:45am UTC](https://www.ruby-forum.com/t/file-renaming-parsing-help/121876/1 "2007-12-02T09:45:00Z")

</div>

First of all let me say that I am an absolute newb when it comes to  
rails. I am simply trying to work on an existing script that was  
written by someone else.

I need to take a filename that will always have a similar name and turn  
it into an rfc2822 compliant line for an xml file. Here is what I have  
so far but I am absolutely lost as you can see. sad

The filenames will always be the same, e.g. November 15,2007.mp3 or  
September 7,2008.mp3, etc. One thing I am concerned about is the day  
since sometimes it will be a single digit and sometimes a double digit,  
although I am sure their is a way around that too.

I would love if someone could shed some light on this for me. I might  
even learn something in the process. smile

#The goal is turn “November 15,2007.mp3” into “Wed, 15 Nov 2007 19:00:00  
GMT”

# 

#So far the output below gives me Wed, Nov15

filename = “November 15, 2007.mp3”  
puts "Wed, " + ( filename[0,3]) + ( filename[-12,2])

---

<div class="post-metadata">

**Author:** ![mike-moscow](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/53a042/32.png) [@mike-moscow](https://www.ruby-forum.com/u/mike-moscow)\
**Post date:** [December 2, 2007, 11:55am UTC](https://www.ruby-forum.com/t/file-renaming-parsing-help/121876/2 "2007-12-02T11:55:39Z")

</div>

On Dec 2, 2007 2:44 AM, Mike Mr. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> since sometimes it will be a single digit and sometimes a double digit,
> 
> filename = “November 15, 2007.mp3”  
> puts "Wed, " + ( filename[0,3]) + ( filename[-12,2])

You could make your life easy by using a Date object and the #parse  
method…

str = “November 15, 2007.mp3”  
date\_str = str.split(‘.’)[0]  
d = Date.parse(date\_str) ##### parse it  
puts d.strftime “%a, %e %b %Y.mp3” ##### output it the way you want

You can add other formats too (see #strftime and look at the source)  
Todd

---

<div class="post-metadata">

**Author:** ![mike-moscow](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/53a042/32.png) [@mike-moscow](https://www.ruby-forum.com/u/mike-moscow)\
**Post date:** [December 2, 2007, 12:14pm UTC](https://www.ruby-forum.com/t/file-renaming-parsing-help/121876/3 "2007-12-02T12:14:25Z")

</div>

-------- Original-Nachricht --------

> Datum: Sun, 2 Dec 2007 17:44:56 +0900  
> Von: “Mike Mr.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> An: removed\_email\_address@domain.invalid  
> Betreff: file renaming/parsing help

> since sometimes it will be a single digit and sometimes a double digit,
> 
> ## filename = “November 15, 2007.mp3” puts "Wed, " + ( filename[0,3]) + ( filename[-12,2])
> 
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).

Dear Mike,

here’s some code using regexps … that avoids knowing  
the exact indices where your one-digit or two-digit day information is.  
To get the day of week, you can use the time class of Ruby.  
([class Time - RDoc Documentation](http://ruby-doc.org/core/classes/Time.html#M000261))

Best regards,

Axel

* * *

require “time”

mp\_files=[“November 15, 2007.mp3”]  
result=[]  
month=[“January”,“February”,“March”,“April”,“May”,“June”,“July”,“August”,“September”,“October”,“November”,“December”]  
year=/(1|2)[0-9]{3}/ # year must start in 1 or in 2 and have 4 digits  
day=/[0-9]{1,2}/

file\_month=‘’  
file\_year=‘’  
file\_day=‘’  
mp\_files.each{|file\_name|  
file\_name.sub!(/.[^.]\*$/,‘’) # chop off endings  
month.each{|m| if file\_name.index(m)!=nil; file\_month=m; break; end}  
if file\_month==‘’  
raise "No month given for file : " + file\_name  
end  
ref\_year=year.match(file\_name)  
if ref\_year!=nil  
file\_year=ref\_year[0]  
else  
raise "No year given for file : " + file\_name  
end  
file\_name.sub!(ref\_year[0],‘’) # remove year, so that doesn’t  
interfere with search for file\_name’s day  
ref\_day=day.match(file\_name)  
if ref\_day!=nil  
file\_day=ref\_day[0]  
else  
raise "No day given for file : " + file\_name  
end

# get day of week

dow=Time.parse([file\_month,file\_day,file\_year].join(’ ‘)).wday  
result\<\<Time.parse([file\_month,file\_day,file\_year].join(’ ')).to\_s  
}

p ‘result’  
p result

---

<div class="post-metadata">

**Author:** ![mike-moscow](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/53a042/32.png) [@mike-moscow](https://www.ruby-forum.com/u/mike-moscow)\
**Post date:** [December 3, 2007, 12:20am UTC](https://www.ruby-forum.com/t/file-renaming-parsing-help/121876/4 "2007-12-03T00:20:35Z")

</div>

Hi,

On Dec 2, 7:44 pm, “Mike Mr.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ## since sometimes it will be a single digit and sometimes a double digit, filename = “November 15, 2007.mp3” puts "Wed, " + ( filename[0,3]) + ( filename[-12,2])
> 
> Posted viahttp://www.ruby-forum.com/.

not exactly what you’re after (not sure how you intend to generate  
times?) but might help.

require ‘date’  
require ‘time’

str = “November 15, 2007.mp3”  
#str\_sans\_ext = str.split(‘.’)[0]

# or,

str\_sans\_ext = str.gsub(/.mp3/,‘’)  
new\_date = Time.parse(str\_sans\_ext)  
puts new\_date  
puts new\_date.httpdate

cheers,

---

<div class="post-metadata">

**Author:** ![mike-moscow](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/53a042/32.png) [@mike-moscow](https://www.ruby-forum.com/u/mike-moscow)\
**Post date:** [December 3, 2007, 10:03pm UTC](https://www.ruby-forum.com/t/file-renaming-parsing-help/121876/5 "2007-12-03T22:03:04Z")

</div>

Todd B. wrote:

> On Dec 2, 2007 2:44 AM, Mike Mr. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > since sometimes it will be a single digit and sometimes a double digit,
> > 
> > filename = “November 15, 2007.mp3”  
> > puts "Wed, " + ( filename[0,3]) + ( filename[-12,2])
> 
> You could make your life easy by using a Date object and the #parse  
> method…
> 
> str = “November 15, 2007.mp3”  
> date\_str = str.split(‘.’)[0]  
> d = Date.parse(date\_str) ##### parse it  
> puts d.strftime “%a, %e %b %Y.mp3” ##### output it the way you want
> 
> You can add other formats too (see #strftime and look at the source)  
> Todd

Thank you so much Todd. I integrated your code successfully and it  
works great. Kudos to all of you who lent me a hand.

Warm regards,

Mike
