-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 2011-04-30, at 12:25 AM, RichardOnRails wrote:
> I know my Subject line looks like heresy in this newsgroup, but I
> can't figure out how I'm screwing up in this bug.
> I posted the program athttp://www.pastie.org/1849430
> It reads in a little control data, which is displayed at
>http://www.pastie.org/1849434
> The program reads in the control data and stores it in hash containing
> two hashes in this case, which represents the two pseudo-hashes in the
> control data.
> My problem is conflicting output by the statements numbered 155 & 156:
> puts %[%d\t%s => %s] % [num+=1, key, value]
> print " key = "; p key
> which respectively yield the following as the 4th and 5th output lines
> of the program:
> 1 BackupFile => {:filename => "BackupFile.rb", :path =>
> ".", :digits => 3}
> key = " BackupFile => {:filename => \"BackupFile.rb\", :path => \".
> \", :digits"
> The first of these output lines indicates to me that key ==
> "BackupFile", as I expected.
> But the second line seems to indicate that key == " BackupFile =>
> {:filename => \"BackupFile.rb\", :path => \".\", :digits"
> Can anyone suggest how I can end this inconsistency?
I don't see an inconsistency in the output, the data might not have been split as you expected.
#!/usr/bin/env ruby
num = 0
key = ' BackupFile => {:filename => "BackupFile.rb", :path => ".", :digits'
value = '3}'
puts %[%d\t%s => %s] % [num+=1, key, value]
print " key = "; p key
seems to produce approximately your output, in your first puts how do you tell which => is which?
Your split looks like the first .+ is too greedy as it tries to consume as much of the string as possible while the match can still work. You could use the ? modifier to make it parsimonius, or use split maybe:
#!/usr/bin/env ruby
string = 'BackupFile => {:filename => "BackupFile.rb", :path => ".", :digits => 3}'
string =~ /(^.+)\s\=\>\s(.+)$/
p $1
p $2
string =~ /(^.+?)\s\=\>\s(.+)$/
p $1
p $2
array = string.split(' => ', 2)
p array[0]
p array[1]
=>
ratdog:tmp mike$ ./try.rb
"BackupFile => {:filename => \"BackupFile.rb\", :path => \".\", :digits"
"3}"
"BackupFile"
"{:filename => \"BackupFile.rb\", :path => \".\", :digits => 3}"
"BackupFile"
"{:filename => \"BackupFile.rb\", :path => \".\", :digits => 3}"
Hope this helps,
Mike
- --
Mike Stok <m...@stok.ca>Mike Stok
The "`Stok' disclaimers" apply.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (Darwin)
iEYEARECAAYFAk28C0EACgkQnsTBwAWZE9qAgACdGxPswALo1oYNerDr/kjElDyz
gqQAn2G3hUKdMLZpcuScqE7kLZ/W/aLR
=UJYj
-----END PGP SIGNATURE-----