From: BearItAll Date: 2005-02-03T21:05:41+09:00 Subject: Re: chop problems 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. 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 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.