[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

What is wrong with my code

Li Chen

10/21/2006 10:31:00 PM

Hi folks,

I write two srcipts to check files in a given directory. Version 1 uses
regular expression and works but I cann't find the size for each file.
Version 2 uses Ruby built-in File.file? method but it doesn't work at
all. I wonder what is going on with my scripts?

Thank you,

Li

#######Version 1:

path='c:\path\to\folder'
Dir.open(path).each do |file|
if file=~/(\w+|d+).(\d{3,})/
puts file
puts File.size(file)# this line doesn't work
file_number+=1
end
end

puts
puts 'Files',path
puts 'File number',file_number

#######Version2
path='c:\path\to\folder'
Dir.open(path).each do |file|
if File.file?(file)
puts file
puts File.size(file)
file_number+=1
end
end

puts
puts 'Files',path
puts 'File number',file_number

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

6 Answers

Paul Lutus

10/22/2006 3:24:00 AM

0

Li Chen wrote:

> Hi folks,
>
> I write two srcipts to check files in a given directory. Version 1 uses
> regular expression and works but I cann't find the size for each file.
> Version 2 uses Ruby built-in File.file? method but it doesn't work at
> all.

Explain. What error messages did you see? You need to provide more
information.

> I wonder what is going on with my scripts?
>
> Thank you,
>
> Li
>
> #######Version 1:
>
> path='c:\path\to\folder'

Don't use backslashes like this. Use forward slashes to avoid problems in
interpretation. Ruby will know what to do.

> Dir.open(path).each do |file|
> if file=~/(\w+|d+).(\d{3,})/
> puts file
> puts File.size(file)# this line doesn't work

"Doesn't work"? Please tell us what error message you saw. Maybe the "file"
was a directory?

--
Paul Lutus
http://www.ara...

camenix

10/22/2006 7:49:00 AM

0

> Hi folks,
>
> I write two srcipts to check files in a given directory. Version 1 uses
> regular expression and works but I cann't find the size for each file.
> Version 2 uses Ruby built-in File.file? method but it doesn't work at
> all. I wonder what is going on with my scripts?
>
> Thank you,
>
> Li
>
> #######Version 1:
>
> path='c:\path\to\folder'
> Dir.open(path).each do |file|
> if file=~/(\w+|d+).(\d{3,})/
> puts file
> puts File.size(file)# this line doesn't work
> file_number+=1
> end
> end
>
> puts
> puts 'Files',path
> puts 'File number',file_number
>
> #######Version2
> path='c:\path\to\folder'
> Dir.open(path).each do |file|
> if File.file?(file)
> puts file
> puts File.size(file)
> file_number+=1
> end
> end
>
> puts
> puts 'Files',path
> puts 'File number',file_number
>
> --
> Posted via http://www.ruby-....

Use File.extend_path to convert path to absolute path.I think there is
something wrong with the file.

Robert Klemme

10/22/2006 1:04:00 PM

0


Li Chen wrote:

> Hi folks,
>
> I write two srcipts to check files in a given directory. Version 1 uses
> regular expression and works but I cann't find the size for each file.
> Version 2 uses Ruby built-in File.file? method but it doesn't work at
> all. I wonder what is going on with my scripts?

So you want to sum sizes of all files in a directory hierarchy whose
names match a certain pattern. The pattern you use cannot be used with
Dir[] for filtering. So you better use find:

sum = 0
Find.find(path) do |f|
sum += File.size(f) if
/(\w+|d+).(\d{3,})/ =~ File.basename(f) && File.file?(f)
end

Note, your regexp might not match what you actually think it matches.
At the moment you match all file names that contain (!) at least a
single digit or word character followed by any character and then at
least three digits. I am guessing here but do you maybe rather want all
files that have a purely numeric file extension? In that case this
regexp would be better

/\.\d+$/

Regards

robert

Li Chen

10/22/2006 9:17:00 PM

0

Robert Klemme wrote:
...
> So you want to sum sizes of all files in a directory hierarchy whose
> names match a certain pattern. The pattern you use cannot be used with
> Dir[] for filtering. So you better use find:
>
> sum = 0
> Find.find(path) do |f|
> sum += File.size(f) if
> /(\w+|d+).(\d{3,})/ =~ File.basename(f) && File.file?(f)
> end
>
...

Hi Robert,

Thank you very much for the code. Based on what I understand and what I
need I make some changes. But I still have some questions:1) How do I
factor the print or format codes here? 2) The outputs of the file are
in reverse order how do I print them out in this format; xxx.001,
xxx.002,...,xxx.026 3) what is the purpose of File.basename here?

Thanks,

Li


#dir6.rb find the file number in a folder
require 'find'

path='I:/Common/Gao/Notebooks/Flow/OT1/OTI-4'


file_number = 0
Find.find(path) do |f|
#sum += File.size(f) if
# /(\w+|d+).(\d{3,})/ =~ File.basename(f) && File.file?(f)
#puts f if /(\w+|d+).(\d{3,})/ =~ File.basename(f) && File.file?(f)
if File.file?(f) && f=~/(\w+|d+).(\d{3,})/
print f,"\t"
printf("%10s %10s", File.size(f),'byte' )
puts
file_number+=1
end
end

puts file_number

###screen output


I:/Common/Gao/Notebooks/Flow/OT1/OT1-typing-3/OT1-3.028 4796348
byte
....
I:/Common/Gao/Notebooks/Flow/OT1/OT1-typing-3/OT1-3.001 11877548
byte
28



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

Paul Lutus

10/22/2006 11:45:00 PM

0

Li Chen wrote:

/ ...

> Thank you very much for the code. Based on what I understand and what I
> need I make some changes. But I still have some questions:1) How do I
> factor the print or format codes here?

Tell me what output you want to see and I will tell you how to get it.

> 2) The outputs of the file are
> in reverse order how do I print them out in this format; xxx.001,
> xxx.002,...,xxx.026

Push the items into an array, sort the array, print the sorted array.

> 3) what is the purpose of File.basename here?

File.basename gives either a filename without its preceding path, or a
filename without either its preceding path or its suffix, depending on
which options are exercised.

Because of the nature of your questions, I want to make you aware of a way
to get some answers on your own:

http://www.rub...

.... and ...

http://www.rub...docs/ProgrammingRuby/

The second of these, which can also be downloaded, is a treasure trove of
information. It contains answers to a large percentage of your questions.

--
Paul Lutus
http://www.ara...

Li Chen

10/23/2006 12:39:00 AM

0

Hi Paul,

Thank you very much. I have a Pickaxe but it is at home.

Li

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