From: Robert Klemme Date: 2005-02-03T21:20:40+09:00 Subject: Re: chop problems "BearItAll" schrieb im Newsbeitrag news:1107432176.47652.0@demeter.uk.clara.net... > Robert Klemme wrote: > > "BearItAll" schrieb im Newsbeitrag > > news:1107426590.1467.0@eunomia.uk.clara.net... > > > >>Hello, I'm new here, also fairly new to ruby, but I already have some > >>very usfull scripts written with it. > >> > >>But a problem I have over and over is that the 'chop' doesn't always > >>work (for me) when dealing with files. > >> > >>An example, the file '/tmp/dirtree' is the result of a class that > >>traverses the directory tree, the lines are written using, > >> > >>f.print "#{filename}\n" > >>(but I've also tried others writing methods) > > > > > > "f.puts filename" does the same more efficiently. > > > > > >>Then next would be the class to read from that file. > >> > >>DIRTREE='/tmp/dirtree' > >>IO.foreach(DIRTREE) { |@x| > >> @x.chop > >> print "Thisdir = #{@x}/*" > >>} > >> > >>The output from print gives, > >> > >>Thisdir = /home/whatever > >>/* > >> > >>So chop hasn't removed the newline. > > > > > > You want chop!() because you want to modify @x. chop() just returns a > > copy of the string with the last char removed. But even better use > > chomp!(), because chop!() and chop() always remove the last char - > > regardless what it is: > > > > > >>>s="abcde\n" > > > > => "abcde\n" > > > >>>s.chop! > > > > => "abcde" > > > >>>s.chop! > > > > => "abcd" > > > >>>s.chop! > > > > => "abc" > > > >>>s.chop! > > > > => "ab" > > > >>>s.chop! > > > > => "a" > > > >>>s.chop! > > > > => "" > > > >>>s.chop! > > > > => nil > > > > > >>Do you use a definitive combination of file write and read that will > >>always work, or is there another trick I don't know about yet. > > > > > > Kind regards > > > > robert > > > > Thankyou, I love you loads. *blush* > Strange really how I read that "Returns a new string..." a billion > times, without actually noticing what it said. > > But then I'm the same with tax return forms. So you never get money back? > So as a reward you are welcome to join me in a all expenses paid round > the world holiday on my yaght. it's about 3 foot long and 2 foot wide > with one oar each. Let me know when your avaiable. Lemmesee, I think, before I can join this invitation I'll have to undergo some shrinking - otherwise there'll be hardly enough space on your "ship"... :-) robert