[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

What is it about File.rename?

Peter Bailey

5/14/2007 12:40:00 PM

Hello,
I'm going a bit nuts with a script of mine that doesn't seem to behave
with file renaming. I've got 172 files in a directory, all with the
extension ".pstxt."

1. Dir.glob("*.pstxt").each do |pstxtfile|
2. $ps2kfile = File.basename(pstxtfile, ".pstxt")
3. $filetime = File.stat(pstxtfile).mtime
4. #$filetime = $filetime.to_s.gsub!(/ -0500.*$/, "")
5. #$totalpages = IO::readlines(pstxtfile).to_s
6. #$totalpages = $totalpages.to_s.chomp!

...

20. File.rename(pstxtfile, pstxtfile.to_s.gsub(/(^.*)\.pdf\.pstxt/,
"ps2k_#{$1}.pstxt"))

...

The above works fine and renames all 172 files in the directory at
present. But, if I uncomment line number 4 and/or 5 and/or 6, it runs
and gives me the following one entry remaining in my directory:

ps2k_.pstxt

All the 172 files are gone! This doesn't make sense to me. The
"filetime" variables are to be used in something completely different
and I don't see why they're affecting this simple renaming of files.

Thanks,
Peter

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

4 Answers

David Mullet

5/14/2007 2:05:00 PM

0

Peter Bailey wrote:
> Hello,
> I'm going a bit nuts with a script of mine that doesn't seem to behave
> with file renaming. I've got 172 files in a directory, all with the
> extension ".pstxt."
>
> 1. Dir.glob("*.pstxt").each do |pstxtfile|
> 2. $ps2kfile = File.basename(pstxtfile, ".pstxt")
> 3. $filetime = File.stat(pstxtfile).mtime
> 4. #$filetime = $filetime.to_s.gsub!(/ -0500.*$/, "")
> 5. #$totalpages = IO::readlines(pstxtfile).to_s
> 6. #$totalpages = $totalpages.to_s.chomp!
>
> ...
>
> 20. File.rename(pstxtfile, pstxtfile.to_s.gsub(/(^.*)\.pdf\.pstxt/,
> "ps2k_#{$1}.pstxt"))
>
> ...
>
> The above works fine and renames all 172 files in the directory at
> present. But, if I uncomment line number 4 and/or 5 and/or 6, it runs
> and gives me the following one entry remaining in my directory:
>
> ps2k_.pstxt
>
> All the 172 files are gone! This doesn't make sense to me. The
> "filetime" variables are to be used in something completely different
> and I don't see why they're affecting this simple renaming of files.
>
> Thanks,
> Peter

Just a thought...

If I recall correctly, gsub! returns nil if no substitution was made.

Does changing...

$filetime = $filetime.to_s.gsub!(/ -0500.*$/, "")

...to...

$filetime = $filetime.to_s.gsub(/ -0500.*$/, "")

...have any effect?

David

http://rubyonwindows.bl...

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

Peter Bailey

5/14/2007 2:38:00 PM

0

David Mullet wrote:
> Peter Bailey wrote:
>> Hello,
>> I'm going a bit nuts with a script of mine that doesn't seem to behave
>> with file renaming. I've got 172 files in a directory, all with the
>> extension ".pstxt."
>>
>> 1. Dir.glob("*.pstxt").each do |pstxtfile|
>> 2. $ps2kfile = File.basename(pstxtfile, ".pstxt")
>> 3. $filetime = File.stat(pstxtfile).mtime
>> 4. #$filetime = $filetime.to_s.gsub!(/ -0500.*$/, "")
>> 5. #$totalpages = IO::readlines(pstxtfile).to_s
>> 6. #$totalpages = $totalpages.to_s.chomp!
>>
>> ...
>>
>> 20. File.rename(pstxtfile, pstxtfile.to_s.gsub(/(^.*)\.pdf\.pstxt/,
>> "ps2k_#{$1}.pstxt"))
>>
>> ...
>>
>> The above works fine and renames all 172 files in the directory at
>> present. But, if I uncomment line number 4 and/or 5 and/or 6, it runs
>> and gives me the following one entry remaining in my directory:
>>
>> ps2k_.pstxt
>>
>> All the 172 files are gone! This doesn't make sense to me. The
>> "filetime" variables are to be used in something completely different
>> and I don't see why they're affecting this simple renaming of files.
>>
>> Thanks,
>> Peter
>
> Just a thought...
>
> If I recall correctly, gsub! returns nil if no substitution was made.
>
> Does changing...
>
> $filetime = $filetime.to_s.gsub!(/ -0500.*$/, "")
>
> ...to...
>
> $filetime = $filetime.to_s.gsub(/ -0500.*$/, "")
>
> ...have any effect?
>
> David
>
> http://rubyonwindows.bl...

Thanks, David. Well, yeh, it does appear that the filetime stuff was
messing me up. This is fairly old code, for me, meaning 3 or 4 months
old, so, I modernized that filetime stuff a bit and now it seems to
work! I basically just simplified it by changing:

$filetime = File.stat(pstxtfile).mtime

to

$filetime = File.mtime(pstxtfile)

Thanks again!
-Peter

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

Rick DeNatale

5/14/2007 8:59:00 PM

0

On 5/14/07, Peter Bailey <pbailey@bna.com> wrote:
> Hello,
> I'm going a bit nuts with a script of mine that doesn't seem to behave
> with file renaming. I've got 172 files in a directory, all with the
> extension ".pstxt."
>
> 1. Dir.glob("*.pstxt").each do |pstxtfile|
> 2. $ps2kfile = File.basename(pstxtfile, ".pstxt")
> 3. $filetime = File.stat(pstxtfile).mtime
> 4. #$filetime = $filetime.to_s.gsub!(/ -0500.*$/, "")
> 5. #$totalpages = IO::readlines(pstxtfile).to_s
> 6. #$totalpages = $totalpages.to_s.chomp!
>
> ...
>
> 20. File.rename(pstxtfile, pstxtfile.to_s.gsub(/(^.*)\.pdf\.pstxt/,
> "ps2k_#{$1}.pstxt"))

I think that your problem is here. String#gsub with a string
replacement doesn't provide the use of $1 in the replacement string.
I'm not sure why it's working when it does. Something before thoses
lines seems to be setting $1 to what you are expecting, Line 4 is
going to reset $1 to nil since it doesn't capture anything.

Try replacing line 20 with either
File.rename(pstxtfile, pstxtfile.to_s.gsub(/(^.*)\.pdf\.pstxt/,
"ps2k_\1.pstxt"))

or

File.rename(pstxtfile, pstxtfile.to_s.gsub(/(^.*)\.pdf\.pstxt/)
{"ps2k_#{$1}.pstxt")}

--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denh...

Rick DeNatale

5/14/2007 9:01:00 PM

0

On 5/14/07, Rick DeNatale <rick.denatale@gmail.com> wrote:


> Try replacing line 20 with either
> File.rename(pstxtfile, pstxtfile.to_s.gsub(/(^.*)\.pdf\.pstxt/,
> "ps2k_\1.pstxt"))

Oops that should be "ps2k_\\1.pstxt" or 'ps2k_\1.pstxt' The double
quote string will interpret a single slash as an escape of the next
character.


--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denh...