(citing me, Basile S.)
What is is opposite of inspect for strings, ie the function parsing
strings external representation (as strings)?
i.e. I do know that "a\tb".inspect gives the 6 character string
"\"a\\tb\"" but what is the method or function that, given the
argument "\"a\\tb\"" produces the "a\tb" string of 3 characters?
I'll try this, assuming I understand you correctly.
Sorry for having expressed myself poorly. I mean
a="a\tb"
binds variable a to a 3 character string (a, tab, b)
aa=a.inspect
binds variable aa to a 6 character string (dblquote, a, backslash, t,
b, dblquote)
I'm desperately seeking a function f such that
b = f(aa)
binds variable b to a 3 character string which is equal to the value
of a, or I am seeking a method m such that
c = aa.m
binds variable c to a 3 character string (a, tab, b) equal to the
value of a.
The to_s method is not a valuable substitute for m since aa.to_s is a
6 character string (equal to aa)
Also how can I easily parse (ie read) from a file such a string like
the output of inspect?
Actually I'm just trying to code in a quick and dirty way a ruby
script dumping into a textual form a (rather small) GDBM file, whoses
keys are all alphanumeric (and data are arbitrary binary strings). So
far, I've managed to code the following script which seems to work.
#! /usr/bin/ruby
# $Id: gdbmdump 1 2005-05-18 20:45:15Z basile $
## -*- ruby -*-
require 'gdbm'
srcdbmname=ARGV[0]
destxtname=ARGV[1]
STDERR.printf("start dumping gdbm %s into %s\n", srcdbmname, destxtname)
if (not File.exists?(srcdbmname)) then
STDERR.printf("source dbm %s does not exist\n", srcdbmname);
exit(1)
end
keyarr=Array::new
GDBM.open(srcdbmname, 0400) do |gdbm|
nbk=0
gdbm.each do |key,val|
if /^[a-zA-Z0-9+*._@,!(){}-]*$/ =~ key then
keyarr << key
nbk = nbk + 1
else
STDERR.printf("bad key %s in file %s\n", key.inspect, srcdbmname);
exit(1)
end
end
STDERR.printf("got and sorting %d keys\n", nbk)
keyarr.sort!
if (File.exists?(destxtname)) then
File.rename(destxtname,destxtname+"~")
end
File.open(destxtname, "w") do |out|
keyarr.each do |key|
val=gdbm[key]
out.printf("%s\t%s\n", key, val.inspect)
end
end
end
STDERR.printf("end dumping gdbm %s into %s\n", srcdbmname, destxtname)
##eof $Id: gdbmdump 1 2005-05-18 20:45:15Z basile $
A typical output of the above script is
ab "12"
cd "45"
where the file starts at the column a, and where keys and data are
separated by a tabulation.
My goal was to code the corresponding loading script gdbmload; the
overall motivation for these 2 scripts is to manage under version
control (Subversion) a GDBM file (by dumping it to & reloading it from
a textual format, and by having a "canonical" dump format of it by
sorting the keys; I don"t want to version control the GDBM binary file
-because it is machine dependent- but a dump format of it, obtained
thru this gdbmdump script and the opposite gdbmload script to be
written)
I am really confused and ashamed of asking such basic questions. My
apologies to all, and a big thanks to Thomas Adam for having taken the
time to answer them.
Regards.
···
On 2005-05-18, Thomas Adam <thomas@edulinux.homeunix.org> wrote:
--
Basile STARYNKEVITCH Basile STARYNKEVITCH
email: basile<at>starynkevitch<dot>net
aliases: basile<at>tunes<dot>org = bstarynk<at>nerim<dot>net
8, rue de la Faïencerie, 92340 Bourg La Reine, France