In article <0G6G00BZI07VGI / mta6.snfc21.pbi.net>, Kevin Smith <sent / qualitycode.com> wrote: >jmichel / schur.institut.math.jussieu.fr wrote: > >> On another topic, is there a way in ruby to have a string behave as a file >> (something like the 'istringstrem' class of C++ ?) > >There was a discussion of this a few weeks ago. >Since Ruby is dynamically typed, Strings and >Files can behave the same (and thus be >interchangable) even if they do not inherit from >each other. > >For eample: > > stream.each_line do > | line | > puts ">" + line > end > >This will work whether stream is a File or a >String. If there are other operations that you >would like String to support (like lineno or >seek) you would just have to create a subclass of >String that implements those methods. I do not think this solves my problem. I will give the specific example where I had the problem to show it: I have as an exercise written a program to get an ID3V2 tag from a .mp3 file. I have defined a class ID3V2tag and a method read_ID3V2tag in class IO which returns a new object of class ID3V2tag (or nil if no such tag was found in the file). Now, I want to re-use my code to parse an ID3V3 tag sitting in a string in memory. In C++, I can just make the string into an istringstream and share the same code. I don't see how I can share the code between both situations in ruby (of course there would be a way: put the code in class String and read the file in memory; but this is not desirable with multi-megabyte files!). It seems that I need a class in which both strings and files can belong, but I cannot do it since neither String nor IO is a module. What did I miss here? Best regards, Jean MICHEL