[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

File question

Justin To

6/20/2008 6:30:00 PM

File name: some_random_report.2008-06-20.csv

I know which folder this file will be in, I just don't know what the
exact file name is. It should look similar to what I have above, except
everyday the date could be different. How would I search the folder for
the file? Also, I want my program to be able to open a new document
called "File name_extra.txt". How do I capture the File name into a
string, once I've figured out which file to open in the first place?

Thanks!!
--
Posted via http://www.ruby-....

4 Answers

Martin DeMello

6/20/2008 6:54:00 PM

0

On Fri, Jun 20, 2008 at 11:30 AM, Justin To <tekmc@hotmail.com> wrote:
> File name: some_random_report.2008-06-20.csv

this should get you started

folder_name = "/path/to/folder"
reports = Dir["#{folder_name}/some_random_report*.csv"]

Dir[] uses file globbing, not regexp matching. If you want the latter,
try Dir["#{folder_name}/*.csv"].grep(/pattern/)

martin

Bryan JJ Buckley

6/21/2008 9:37:00 AM

0

Dir::glob is a bit more powerful than Dir::[], and it can take a
block, to which the filename gets passed. ri Dir::glob has pretty
comprehensive documentation on this.

Dir.glob("/path/to/files/*.*-*-*.csv") do |filename|
File.open("name_extra.txt", "w+") do |file|
file.puts filename
end
end

But if you need to mangle the filename, then, as Martin said, you can
run a regexp on the string once you have it.

2008/6/20 Justin To <tekmc@hotmail.com>:
> File name: some_random_report.2008-06-20.csv
>
> I know which folder this file will be in, I just don't know what the
> exact file name is. It should look similar to what I have above, except
> everyday the date could be different. How would I search the folder for
> the file? Also, I want my program to be able to open a new document
> called "File name_extra.txt". How do I capture the File name into a
> string, once I've figured out which file to open in the first place?
>
> Thanks!!
> --
> Posted via http://www.ruby-....
>
>



--
JJ

Justin To

6/21/2008 4:12:00 PM

0

Thanks for the detailed explanation Bryan. I've figured out how to use
it now, but I'm still stuck on how to check for the latest file:

For instance,

some_file.2008-06-02.csv
some_file.2008-06-03.csv

Now I want to traverse the folder and open up the latter file. If it is
a viable solution, is there a command that returns the most recent file
with the name pattern "some_file.\d{4}-\d{2}-\d{2}.csv"

Thanks so much!
--
Posted via http://www.ruby-....

Bryan JJ Buckley

6/21/2008 4:27:00 PM

0

Hmm, well they're named nicely, so you can probably do something like

File.open(Dir['some_file.*.csv'].sort.last) do |f|
puts f.read # print out the contents of f
end

if you're confident that the dates in the names are accurate.
If you want to be more pedantic, you can check by the file's ctime
(which is when the directory's info for that file was changed) or
mtime (which is when the file itself was last changed.

latest = Dir['some_file.*.csv'].sort_by { |f| File.ctime(f) }.last

(Use Dir.glob instead if you need to). That's basically just sorting
the filenames based on the file's timestamp (ascending), and taking
the last one.

JJ

2008/6/21 Justin To <tekmc@hotmail.com>:
> Thanks for the detailed explanation Bryan. I've figured out how to use
> it now, but I'm still stuck on how to check for the latest file:
>
> For instance,
>
> some_file.2008-06-02.csv
> some_file.2008-06-03.csv
>
> Now I want to traverse the folder and open up the latter file. If it is
> a viable solution, is there a command that returns the most recent file
> with the name pattern "some_file.\d{4}-\d{2}-\d{2}.csv"
>
> Thanks so much!
> --
> Posted via http://www.ruby-....
>
>



--
JJ