Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > change in number of leading spaces

Reply
Thread Tools

change in number of leading spaces

 
 
Jesse B.
Guest
Posts: n/a
 
      04-01-2010
Sorry about re-post due to typo.

I am looping through a file and using a script that detects leading
spaces (based on a previous post to this forum)

What I want to do is to detect changes in number of leading spaces, for
instance when one line has more, fewer, or the same number of leading
spaces as the previous line.

The problem I am having is with setting a value from within the loop
which is then available on the next loop.

here is an example of the program:

infile = File.new("input.txt", "r")
outfile = File.new("output.txt", "w")
infile.each_line {
|i|

spaces = i[/\A */].length

#the following variable "stored" puts undef every time through, which
means #it's not retaining the value on the next loop?

if defined?(stored)== true
puts stored

elsif defined?(stored)== nil
puts "undef"
stored = spaces
end


case spaces
when 1
output= "onespace"

when 2
output="2 spaces"

end


outfile.write output
}

outfile.close()
infile.close()


outfile = File.new("output.txt", "r")
outfile.each_line {
|i|
print ">>", i
}
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Robert Klemme
Guest
Posts: n/a
 
      04-01-2010
2010/4/1 Jesse B. <(E-Mail Removed)>:
> Sorry about re-post due to typo.
>
> I am looping through a file and using a script that detects leading
> spaces (based on a previous post to this forum)
>
> What I want to do is to detect changes in number of leading spaces, for
> instance when one line has more, fewer, or the same number of leading
> spaces as the previous line.
>
> The problem I am having is with setting a value from within the loop
> which is then available on the next loop.
>
> here is an example of the program:
>
> infile =3D File.new("input.txt", "r")


You can simplify this by using

File.foreach "input.txt" do |line|
...
end

> outfile =3D File.new("output.txt", "w")


Also, please make it a habit to use the block form of File.open which
is much safer. So this becomes

File.open("output.txt", "w") do |outfile|
...
end

For some background:
http://blog.rubybestpractices.com/po...ks_for_Robust=
ness.html

> infile.each_line {
> =A0|i|
>
> spaces =3D i[/\A */].length
>
> #the following variable "stored" puts undef every time through, which
> means #it's not retaining the value on the next loop?
>
> if defined?(stored)=3D=3D true
> puts stored


As Alex already pointed out this should be defined outside the loop.

Here's another variant

def count_leading_spaces(s)
s[/\A */].length # or any other method that works
end

sp =3D 0

ARGF.each_line do |line|
i =3D count_leading_spaces line

if i !=3D sp
line.chomp! # avoid duplicate \n
printf "Change from %2d to %2d spaces in this line %4d: %s\n",
sp, i, ARGF.lineno, line
sp =3D i
end
end


Kind regards

robert

--=20
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

 
Reply With Quote
 
 
 
 
Jesse B.
Guest
Posts: n/a
 
      04-04-2010
Robert, Thank you for taking the time to write back.
I got the initial file operations you gave me working like so:

File.open("output.txt", "w") do |outfile|
File.foreach "input.txt" do |line|
puts line
outfile.write line
end
end

which both displays the results on the command line and in the
output.txt file

then I tried to add in the rest like so

File.open("output.txt", "w") do |outfile|
File.foreach "input.txt" do |line|

def count_leading_spaces(s)
s[/\A */].length # or any other method that works
end

sp = 0

ARGF.each_line do |line|
i = count_leading_spaces line

if i != sp
line.chomp! # avoid duplicate \n
printf "Change from %2d to %2d spaces in this line %4d: %s\n",
sp, i, ARGF.lineno, line
sp = i
end
end


#puts line
#outfile.write line
end
end

and when I save as a ruby file and run from the command line nothing
happens, until i hit control-c and get a list of errors.

I think the problem is that I am incorrectly assembling your snippets.

Would it be possible to redo this as a complete example that works as a
ruby file run from the command line?

thank you in advance

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
stetecting change in number of leading spaces while looping Jesse B. Ruby 0 03-31-2010 06:35 PM
Re: How to trim a String trailing spaces, but not leading spaces? Roedy Green Java 3 09-14-2008 02:10 AM
Re: How to trim a String trailing spaces, but not leading spaces? John B. Matthews Java 4 09-12-2008 05:28 AM
All leading tabs or all leading spaces - why isn't that enforced? John Nagle Python 4 08-07-2007 04:05 PM
RE: All leading tabs or all leading spaces - why isn't that enforced? Delaney, Timothy (Tim) Python 0 08-07-2007 03:50 AM



Advertisments