josh
1
Hi all
I’m looking for the coolest way to get the substring
/Webwork/pgbookings
out of
/Users/Josh/Webwork/pgbookings
The part /Users/Josh is saved in the variable my_var.
In PHP I would do something like the following:
substr(/Users/Josh/Webwork/pgbookings, strlen(my_var)) # =>
/Webwork/pgbookings
What’s the fastest way to do this in Ruby?
Josh
josh
2
On Apr 9, 2007, at 6:52 AM, Joshua M. wrote:
The part /Users/Josh is saved in the variable my_var.
In PHP I would do something like the following:
substr(/Users/Josh/Webwork/pgbookings, strlen(my_var)) # =>
/Webwork/pgbookings
What’s the fastest way to do this in Ruby?
I’m not sure which way is faster, so let’s ask Ruby to time some of
my ideas:
#!/usr/bin/env ruby -w
require “benchmark”
data = “/Users/Josh/Webwork/pgbookings”
prefix = “/Webwork/pgbookings”
TESTS = 1_000_000
Benchmark.bmbm do |results|
results.report("[i…-i]:") { TESTS.times { data
[prefix.length…-1] } }
results.report("[i, l]:") { TESTS.times { data[prefix.length,
data.length] } }
results.report(“sub():”) { TESTS.times { data.sub(/\A#{prefix}/,
“”) } }
results.report("[re, c]:") { TESTS.times { data[/\A#{prefix}(.+)/,
1] } }
end
>> Rehearsal --------------------------------------------
>> [i…-i]: 2.500000 0.000000 2.500000 ( 2.511868)
>> [i, l]: 0.630000 0.000000 0.630000 ( 0.634460)
>> sub(): 6.800000 0.020000 6.820000 ( 6.850561)
>> [re, c]: 7.180000 0.010000 7.190000 ( 7.204910)
>> ---------------------------------- total: 17.140000sec
>>
>> user system total real
>> [i…-i]: 2.500000 0.000000 2.500000 ( 2.500795)
>> [i, l]: 0.630000 0.010000 0.640000 ( 0.633458)
>> sub(): 6.840000 0.000000 6.840000 ( 6.853133)
>> [re, c]: 7.110000 0.010000 7.120000 ( 7.130398)
END
Hope that helps.
James Edward G. II
josh
5
On 4/9/07, James Edward G. II [email protected] wrote:
data = “/Users/Josh/Webwork/pgbookings”
prefix = “/Webwork/pgbookings”
I think you meant
prefix = “/Users/Josh”
This doesn’t affect the qualitative results of the benchmark but it
does change it to do what the OP was trying to do.
Note that “/Webwork/pgbookings” is NOT a prefix of
“/Users/Josh/Webwork/pgbookings”
And cosmetically there’s a typo:
results.report(“[i…-i]:”) { TESTS.times { data
[prefix.length…-1] } }
should be:
results.report(“[i…-1:”) { TESTS.times { data[prefix.length…-1] } }
–
Rick DeNatale
My blog on Ruby
http://talklikeaduck.denhaven2.com/
josh
6
On Apr 9, 2007, at 8:33 AM, Rick DeNatale wrote:
On 4/9/07, James Edward G. II [email protected] wrote:
data = “/Users/Josh/Webwork/pgbookings”
prefix = “/Webwork/pgbookings”
I think you meant
prefix = “/Users/Josh”
This doesn’t affect the qualitative results of the benchmark but it
does change it to do what the OP was trying to do.
Oops, I did. Thank you.
And cosmetically there’s a typo:
results.report(“[i…-i]:”) { TESTS.times { data
[prefix.length…-1] } }
should be:
results.report(“[i…-1:”) { TESTS.times { data
[prefix.length…-1] } }
Yeah, I blew that one, didn’t I?
Thanks for the corrections.
James Edward G. II